一文读懂什么是JMS规范
一、JMS是什么
java消息服务(java message service即JMS)应用程序接口是一个java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。java消息服务是一个与具体平台无关的API。
对应的API接口就在javax.jms包下面:
二、JMS的对象模型
ConnectionFactory | 连接工厂 |
Connection | 连接 |
Session | 会话 |
Destination | 目的 |
MessageProducer | 生产者 |
MessageConsumer | 消费者 |
Message | 消息 |
Broker | 消息中间件的实例 |
也就是说,当我们去实现JMS规范的具体实现时,需要考虑上述因素,去将这些模型都有对应的实现。
三、JMS 的消息模型
- Point-to-Point(P2P)/点对点:也就是一条消息发送给一个消费者去消费,点对点模式一般是和Queue使用,也就是消息发送到Queue中,消费者从Queue中消费消息。
- Publish/Subscribe(Pub/Sub)/主题(发布订阅):发布订阅模式一般适合Topic关联,一个生产向topic中发送消息,只要订阅了这个topic的消息者,都可以接收到这条数据。
四、JMS的消息结构
jms的消息结构只要包括三个方面:消息头、消息属性、消息体。
- 消息头:关于一些消息的描述信息
JMSDestination |
消息的目的地,Topic或者Queue |
JMSDeliveryMode |
消息的发送模式 |
JMSTimestamp |
消息传递给Broker的时间戳,它不是实际发送的时间 |
JMSExpiration |
消息的有效期,在有效期内,消息消费者才可以消费这个消息 |
JMSPriority |
消息的优先级。0-4为正常的优先级,5-9为高优先级 |
JMSMessageID |
一个字符串用来唯一标示一个消息 |
JMSReplyTo |
有时消息生产者希望消费者回复一个消息,JMSReplyTo为一个Destination,表示需要回复的目的地 |
JMSCorrelationID |
通常用来关联多个Message |
JMSType |
表示消息体的结构,和JMS提供者有关 |
JMSRedelivered |
如果这个值为true,表示消息是被重新发送了 |
- 消息属性:可以理解为消息的附加信息头,属性名可以自定义。
- 消息体类型 :发送消息的消息格式,有一下5中类型
BytesMessage |
用来传递字节消息 |
MapMessage |
用来传递键值对消息 |
ObjectMessage |
用来传递序列化对象 |
StreamMessage |
用来传递文件等 |
TextMessage |
用来传递字符串 |