Java消息服务JMS
一、JMS规范
JMS是Java消息服务(Java Message Service)应用程序接口的简写,是一个Java平台中关于面向消息中间件(MOM)的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建、发送、读取消息等。用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。
JMS规范包含如下元素:
- JMS提供者:实现JMS接口和规范的消息中间件,即我们的搭建的MQ服务器(比如rabbitMQ\Kafka\ActiveMQ)。
- JMS生产者:创建并发送JMS消息的客户端应用。
- JMS消费者:接收和处理JMS消息的客户端应用。
- JMS消息:在JMS生产者和消费者之间传递的数据对象。
- JMS队列:点对点模型的消息发送机制,存储JSM消息的数据结构。
- JMS主题:发布订阅模型的消息发送机制。
JSM消息包含消息头、消息体、消息属性三部分,消息头包含一些识别信息和路由信息,消息体封装的是具体的消息内容,消息属性包含以下消息额外的信息。
- 消息头标准属性:
- JMSDestination:消息发送的目的地,主要是指Queue(队列)和topic(主题),自动分配。
- JMSDeliveryMode: 消息传送模式,PERSISTENT(持久化)、NON_PERSISTENT(非持久化)。
- JMSExpiration:消息过期时间(时间戳)。
- JMSPriority:消息优先级,0-4是普通消息,5-9是加急消息。
- JMSMessageId: 唯一识别每个消息的标志,由JMS provider产生,自动分配。
- JMSTimestamp:一个JMS provider在调用send()自动设置的,它是消息被发送和接收的实际时间搓。自动分配。
- JMSCorrelationId:用来连接到另外一个消息。
- JMSReplyTo: 提供本消息回复消息的目的地,由开发者设置。
- JMSType: 消息类别的识别符,由开发者设置。
- JMSRedelivered:消息的重发标志,false代表该消息是第一次发送,true代表该消息为重发消息。
2.标准消息属性:
- 应用程序设置的属性。
- JMS定义的属性:JMSXUserID、JMSXAppID、JMSXDeliveryCount、JMSXGroupID、JMSXGroupSeq、JMSXProducerTXID、JMSXConsumerTXID、JMSXRcvTimestamp、JMSXState。
- JMS提供商特定的属性。
3.消息体:JMS中定义了5种消息体,即ByteMessage、MapMessage、ObjectMessage、StreamMessage和TextMessage。
二、JMS消息传递模型
JMS消息的传递有点对点队列模式和发布订阅模式,点对点模式下多个消费者之间是竞争关系,一个消息只能由一个消费者处理。发布订阅模式下,消息发布者将消息发送到topic,JMS提供者会将这些信息投递给topic订阅者,订阅者之间共享消息数据。
三、JMS编程模型
- ConnectionFactory(连接工厂):负责创建到JMS提供者的连接。
- Connection(连接):用于创建会话。
- Session(会话):创建目的地、生产者、消费者、消息。
- Destination(目的地):消息发送目标。
- MessageProducer(消息生产者):发送消息。
- MessageConsumer(消息消费者):接收和处理消息。
- Message(消息):传递的内容主体。