01、JMS规范介绍

01、JMS规范介绍

在我们正式学习Kafka之前,先来了解下JMS,因为这可以在一定程度上帮助你更加深入的理解和学习Kafka。

1、 JMS简介

JMS,全称Java Mesage Service,即Java消息服务应用程序接口,是一个Java平台中关于面向消息中间件的AP!,用于在两个应用程序之间、或者分布式系统中发送消息,进行异步通信。

JMS是一种与厂商无关的API,用来访问消息、收发系统消息,它类似于JDBC。

JMS可以自己使用Java代码或者别的代码来编写,开源的实现有Active MQ、阿里的Rocket MQ(已贡献给Apache)、Kafka等。

JMS(Java Message Service)是Java平台中关于面向消息中间件(MOM)的一个API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。JMS API定义了一组规范,允许应用程序组件通过消息传递进行通信,从而实现松耦合的消费者和生产者。JMS支持两种消息发送和接收模型:点对点(P2P)模型和发布/订阅模型。

在点对点模型中,消息生产者发送消息到队列,消息消费者从队列中接收消息,每个消息只有一个消费者。而在发布/订阅模型中,消息生产者向主题发布消息,而消息消费者订阅主题以接收消息,允许一个消息被多个消费者消费。

我们为什么要使用消息队列呢?

有些网站会在某些时间段的访间量暴增,何如各电商购物平台的秒杀活动、12306枪票等场最,而在访问量暴增的时候,对服务器就是一个非常大的孝验!服务器能够处理的访问最是有眼的,例如某公司的服务器能够同时处理50W连接消求,但是在活动的期间,访问最到达了70W,那么此时婴么会有20W的访问被丢弃,婴么干能服务器崔爽,无论是哪一种结果,对于用户都是非常不友好的!那么,如何去处理这样的场最的?此时犹借要消息队列了!

面对比较大的流量冲击,在网站系统中一般都会有一个消息存储/缓存系统,网站就可以按照自己的负载能力来消费这些消息,这就是一个消息队列,或者叫消息中间件

image-20240506105117832

2、 JMS 核心组件

JMS定义了几种核心概念,包括:

  1. JMS Provider:实现JMS接口和规范的消息中间件,也就是MQ服务器(如ActiveMQ, RabbitMQ, Kafka等)。
  2. JMS Producer(消息生产者):创建和发送JMS消息的客户端应用。
  3. JMS Consumer(消息消费者):接收和处理JMS消息的客户端。
  4. JMS Message:JMS中用于传递的数据对象,由消息头、消息属性和消息体组成。
  5. Destination(目的地):消息发送的目标位置,可以是队列(Queue)或主题(Topic)。
  6. Connection Factory:用于创建与JMS提供者之间的连接的工厂对象。
  7. Connection:代表客户端与JMS提供者之间的通信链路。
  8. Session:提供创建、发送和接收消息的操作环境,可以是点对点或发布订阅。
  9. Message Listener:消息监听器,用于异步接收消息。

JMS消息由三部分组成:消息头、消息属性和消息体。消息头包含了如JMSDestination、JMSDeliveryMode、JMSExpiration、JMSPriority、JMSMessageID等属性,这些属性提供了关于消息如何发送和接收的重要信息。

JMS提供可靠性、灵活性和可扩展性,支持事务处理、持久化消息、异步消息处理等特性。它还可以与其他企业级技术集成,如企业服务总线(ESB)、业务流程管理(BPM)系统和云计算平台。

JMS广泛应用于分布式系统的通信中,特别是在需要解耦、异步处理、高可靠性和可扩展性的场景中。通过使用JMS,开发者可以构建出强大且灵活的消息驱动应用程序。

image-20240506105755513

3、 JMS 消息传输模型

JMS(Java Message Service)支持两种主要的消息传输模型:

  1. 点对点(Point-to-Point,P2P)模型

    • 在这个模型中,消息生产者发送消息到队列(Queue),消息消费者从队列中接收消息。
    • 每个消息只能被一个消费者接收,一旦消息被消费,它就会从队列中移除,确保消息不会重复处理。
    • 这种模型适用于需要确保消息只被处理一次的场景,例如订单处理、用户请求处理等。

    image-20240506110617134

  2. 发布/订阅(Publish/Subscribe,Pub/Sub)模型

    • 在发布/订阅模型中,消息生产者(发布者)将消息发送到主题(Topic),而消息消费者(订阅者)订阅感兴趣的主题。
    • 一个发布者发送的消息可以被多个订阅者接收,这使得发布/订阅模型非常适合需要一对多通信的场景。
    • 订阅者可以设置过滤条件,只接收满足特定条件的消息,这增加了消息传输的灵活性。

    image-20240506110631387

两种模型的特点对比:

  • 一对一 vs 一对多
    • P2P模型是一对一的消息传输,每条消息只有一个消费者。
    • Pub/Sub模型是一对多的消息传输,一条消息可以被多个订阅者接收。
  • 队列 vs 主题
    • 在P2P模型中,使用队列作为消息的容器,队列保证了消息的顺序性和独立性。
    • 在Pub/Sub模型中,使用主题作为消息的发布点,主题允许多个订阅者接收消息。
  • 消息确认
    • 在P2P模型中,消费者通常需要显式确认消息,告知消息服务器消息已被成功处理。
    • 在Pub/Sub模型中,订阅者可能需要确认消息,也可能不需要,这取决于具体的实现和配置。
  • 消息持久性
    • 在两种模型中,都可以配置消息的持久性,确保消息不会因为系统故障而丢失。

JMS的这两种消息传输模型为不同的应用场景提供了灵活的消息传递机制,允许开发者根据业务需求选择合适的模型来实现消息通信。

4、 JMS 消息接收

JMS(Java Message Service)支持多种消息接收方式,这些方式主要与JMS的两种消息传输模型(点对点和发布/订阅)相关。以下是一些常见的消息接收方式:

点对点(P2P)模型的消息接收方式:

  1. 同步接收:
    • 消费者使用receive()方法从队列中同步接收消息。这是一种阻塞调用,如果在队列中没有消息可用,调用将一直阻塞直到消息到达。
  2. 异步接收:
    • 消费者可以注册一个MessageListener接口的实现。当消息到达时,JMS提供者会自动调用MessageListeneronMessage()方法,这是一种非阻塞的接收方式。
  3. 消息选择:
    • 通过设置消息选择器(一个SQL92查询),消费者可以根据特定的消息属性过滤接收的消息。
  4. 事务性接收:
    • 在事务性会话中,消息的接收可以是事务的一部分。如果事务回滚,那么接收的消息也会回滚,确保数据的一致性。

发布/订阅(Pub/Sub)模型的消息接收方式:

  1. 持久订阅:
    • 订阅者可以创建一个持久订阅,即使订阅者当前不处于活动状态,消息服务器也会为订阅者保留消息。
  2. 非持久订阅:
    • 订阅者创建的是非持久订阅,如果订阅者当前不处于活动状态,那么它将错过发布的消息。
  3. 同步/异步接收:
    • 类似于P2P模型,订阅者可以使用receive()方法进行同步接收,或者注册MessageListener进行异步接收。
  4. 消息选择:
    • 订阅者也可以使用消息选择器来过滤接收到的消息。
  5. 分布式订阅:
    • 在分布式系统中,订阅者可能分布在不同的节点上,每个节点上的订阅者都可以接收到发布的消息。
  6. 事务性订阅:
    • 与P2P模型类似,发布/订阅模型也可以在事务性会话中进行消息接收。

其他考虑因素:

  • 消息确认:
    • 消费者在处理完消息后,需要确认消息,以防止消息重复处理。在自动确认模式下,消息服务器会自动确认。在手动确认模式下,消费者需要显式地确认消息。
  • 消息优先级:
    • JMS允许消息具有不同的优先级,高优先级的消息会优先被消费者接收。
  • 消息持久性:
    • 可以根据消息的重要性设置消息的持久性,持久化消息在系统故障时更不容易丢失。

JMS的灵活性允许开发者根据具体的场景和需求选择最合适的消息接收方式。

5、 JMS 消息结构

JMS(Java Message Service)定义了一种标准的消息结构,以确保不同JMS提供者(如ActiveMQ, RabbitMQ, Kafka等)之间的互操作性。一个JMS消息由以下几个主要部分组成:

  1. 消息头(Message Header)
    • 消息头是消息的元数据,包含了用于识别消息和为消息寻找路由的操作设置。
    • 消息头的属性是固定的,由JMS规范定义,包括:
      • JMSDestination:消息的目标目的地(队列或主题)。
      • JMSDeliveryMode:消息的持久性,可以是持久(PERSISTENT)或非持久(NON_PERSISTENT)。
      • JMSExpiration:消息的过期时间,超过这个时间消息将不再被传递。
      • JMSPriority:消息的优先级,取值范围是0-9,数字越大优先级越高。
      • JMSMessageID:消息的唯一标识,通常由JMS提供者自动生成。
  2. 消息属性(Message Properties)
    • 消息属性是一组可选的属性,用于提供额外的信息或用于消息过滤。
    • 可以包含客户端自定义的属性和内容,支持通过消息选择器进行过滤。
  3. 消息体(Message Body)
    • 消息体是消息中实际承载数据的部分,JMS定义了几种不同的消息体类型,用于不同的数据传输需求:
      • TextMessage:用于存储字符串信息。
      • MapMessage:一个键值对的集合,键和值都是String类型。
      • BytesMessage:用于二进制数据的传输。
      • StreamMessage:用于存储原始字节流,类似于Java的序列化机制。
      • ObjectMessage:用于存储一个Java对象,该对象需要实现Serializable接口。

JMS消息的结构设计允许它在不同的应用程序之间高效地传递复杂的数据结构,同时保持了消息传递的可靠性和灵活性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/597470.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HIVE统计WordCount

HIVE WORDCOUNT 目录 HIVE WORDCOUNT 一、WORDCOUNT 1.我们先创建一个新的数据库 2.创建表并插入数据 3.统计WORDCOUNT 4.UNION ALL 用法 5.WITH AS 用法 1.WORDCOUNT 1)我们先创建一个新的数据库 create database learn3;use learn3; 2)创建表…

产品推荐 | 基于 Virtex UltraScale+ XCVU3P的FACE-VPXSSD-3PA 存储板

01 产品概述 FACE(FPGA Algorithm aCceleration Engine)FPGA算法加速开发引擎是基于FPGA可编程器件构建的一系列算法加速开发引擎平台。FACE-VPXSSD-3PA存储平台是FACE系列中的一员。该平台板载2组2GB 64bit DDR4、2路QSFP28光接口、4个NVME SSD M.2接口…

yum常用命令与lrzsz的在线安装

yum命令 yum( Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。 基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装…

设备驱动中device_create函数与sys/devices目录

当调用device_create时parent参数为空时,新添加的设备位于sys/devices//sys/devices/virtual目录 以下面代码的为例 my_newcharled.myclass class_create(THIS_MODULE,dtled); my_newcharled.mydevice device_create(my_newcharled.myclass,NULL,my_newcharled.ne…

04-19 周五 GitHub actions-runner 程序解释

04-19 周五 GitHub actions-runner 程序解释 时间版本修改人描述2024年4月19日17:26:17V0.1宋全恒新建文档 简介 本文主要描述了actions-runner-linux-x64-2.315.0.tar.gz这个github actions CI所需要的客户端安装包的重要文件和内容信息。有关GitHub actions 的配置&#xff…

天图通逊|塘厦总仓服务全面升级

尊敬的客户: 您好!为了提供更优质、更高效的物流服务品质,我司针对国内塘厦仓库进行全面优化升级。升级内容如下: 1.分拣设备升级:在原有的自动分拣设备进行升级,由1.0速升级为1.5高速版;将分拣口的数量从…

<网络安全>《77 概念讲解<第十课 物联网常用协议-(近距离通信)感应层协议>》

协议简称全称名称内容说明RFIDRadio Frequency Identification射频识别阅读器与标签之间进行非接触式的数据通信,达到识别目标的目的。RFID的应用非常广泛,典型应用有动物晶片、汽车晶片防盗器、门禁管制、停车场管制、生产线自动化、物料管理。完整的RF…

基于数字证书的移动终端金融安全身份认证规范

基于数字证书的移动终端金融安全身份认证规范 1 范围 本文件规定了基于数字证书的移动终端金融安全身份认证的服务描述、移动终端生命周期管理、服 务生命周期管理、密钥管理、安全及功能、风险控制和运营管理的要求。 本文件适用于银行业金融机构、非银行支付机构&#xff0c…

1.4 初探JdbcTemplate操作

实战目的 掌握Spring框架中JdbcTemplate的使用,实现对数据库的基本操作。理解数据库连接池的工作原理及其在实际开发中的重要性。通过实际操作,加深对Spring框架中ORM(对象关系映射)的理解。 关键技术点 JdbcTemplate操作&…

triton之语法学习

一 基本语法 1 torch中tensor的声明 x = torch.tensor([[1,2, 1, 1, 1, 1, 1, 1],[2,2,2,2,2,2,2,2]],device=cuda) 声明的时候有的时候需要指出数据的类型,不然在kernel中数据类型无法匹配 x = torch.tensor([1,2,1,1,1,1,1,1],dtype = torch.int32,device=cuda) 2 idx id…

小程序激励广告视频多次回调问题

1.问题 2. 激励视频使用及解决方案 官方文档 let videoAd null; // 在页面中定义激励视频广告 Page({/*** 页面的初始数据*/data: {},/*** 生命周期函数--监听页面加载*/onLoad(options) {let that this;// 创建激励视频广告实例if (wx.createRewardedVideoAd) {videoAd w…

计算机网络4——网络层8 软件定义网络 SDN

文章目录 一、介绍1、简介2、原理3、案例1)普通2)负载均衡的例子3)防火墙的例子 二、控制层面1、特征2、层次 一、介绍 1、简介 SDN的概念最初由斯坦福大学N.McKeown于2009年首先提出。当时还只是在学术界进行探讨的一种新的网络体系结构。…

如何全面规避医疗数据安全风险?“一中心三大管控域”打开新思路!

作为医院的核心基础设施,数据库已然演变成了一种具有“资产”属性的重要元素。而随着不断变化的医疗业务场景和日趋严格的合规性要求,如何让安全全方位贯穿医疗数据的生命周期,是一项系统性的建设工作,难点诸多。 基于多年的数据…

商标不做检索分析,直接申请通过率很低!

今天有个网友拿到驳回通知书找到普推知产老杨,让分析驳回通过率如何,他主要两个文字商标和两个图形商标,文字商标都是两个字的,两个字的商标名称基本都有相同或高近,引用了好几个高度近似,直接做驳回复审通…

设备自动化技术商务咨询

​南京纳恩自动化科技有限公司,成立于 2010年。高新技术企业、软件企业,致力于为客户提供最佳的继电保护、电力监控、智慧用电、工业自动化系统以及基于大数据、云系统的产品解决方案和服务。 自动化行业深耕多年,成就丰富的电力自动化行业经…

Ansible 自动化运维工具 - 了解和模块应用

目录 一. Ansible 的相关知识 1.1 Ansible 工具的简介 1.2 Ansible的四大组件 1.3 运维自动化工具 1.4 Ansible 和其它自动化运维工具对比 1.5 Ansible 的优缺点 二. Ansible 环境安装部署 2.1 管理端安装 ansible 2.2 配置主机清单 三. ansible 命令行模块 3.1 comm…

【Unity动画系统】动画层级(Animation Layer)讲解与使用

如何使用Unity的Animation Layer和Avater Mask把多个动画组合使用 想让玩家持枪行走,但是手里只有行走和持枪站立的动作。 Unity中最方便的解决办法就是使用动画层级animation layer以及替身蒙版avatar mask。 创建一个动画层级 Weight表示权重,0的话则…

Linux安装Python3.9环境

大家好,今天给大家分享一下在Linux系统中安装Python3环境,Linux系统中自带的Python2尽量不要删除,删除后可能会导致系统出现问题。 关于Linux常用命令,可以参考:作为测试人员的Linux常用命令 一、下载Python3安装包 …

Unity射击游戏开发教程:(11)制造敌人爆炸

增加爆炸效果 爆炸一切都变得更好!尤其是当你消灭敌人时。在这篇文章中,我将讨论如何在敌人被击中时为其添加爆炸动画。 在敌人的预制件中,您将需要创建一个新的动画。查看控制动画的动画器,默认情况下将从进入动画到敌人爆炸动画。这意味着,一旦敌人被实例化,敌人爆炸…

基于Opencv的车牌识别系统(毕业设计可用)

系统架构 图像采集:首先,通过摄像头等设备捕捉车辆图像。图像质量直接影响后续处理的准确性,因此高质量的图像采集是基础。 预处理:对获取的原始图像进行预处理,包括灰度化、降噪、对比度增强和边缘检测等。这些操作旨…