1. JMS消息模型
JMS消息由以下几部分组成:消息头,属性,消息体。
1)消息头(Header)
消息头包含消息的识别信息和路由信息,消息头包含一些标准的属性如:JMSDestination,JMSMessageID 等。
消息头 |
由谁设置 |
JMSDestination |
send 或 publish 方法 |
JMSDeliveryMode |
send 或 publish 方法 |
JMSExpiration |
send 或 publish 方法 |
JMSPriority |
send 或 publish 方法 |
JMSMessageID |
send 或 publish 方法 |
JMSTimestamp |
send 或 publish 方法 |
JMSCorrelationID |
客户 |
JMSReplyTo |
客户 |
JMSType |
客户 |
JMSRedelivered |
JMS Provider |
2)属性(Properties)
除了消息头中定义好的标准属性外,JMS 提供一种机制增加新属性到消息头中,这种新属性包含以下几种:
- 应用需要用到的属性;
- 消息头中原有的一些可选属性;
- JMS Provider 需要用到的属性。
标准的JMS 消息头包含以下属性:
- JMSDestination --消息发送的目的地
- JMSDeliveryMode --传递模式,有两种模式: PERSISTENT 和NON_PERSISTENT,PERSISTENT 表示该消息一定要被送到目的地,否则会导致应用错误。NON_PERSISTENT 表示偶然丢失该消息是被允许的,这两种模式使开发者可以在消息传递的可靠性和吞吐量之间找到平衡点。
- JMSMessageID 唯一识别每个消息的标识,由JMS Provider 产生。
- JMSTimestamp 一个消息被提交给JMS Provider 到消息被发出的时间。
- JMSCorrelationID 用来连接到另外一个消息,典型的应用是在回复消息中连接到原消息。
- JMSReplyTo 提供本消息回复消息的目的地址。
- JMSRedelivered 如果一个客户端收到一个设置了JMSRedelivered 属性的消息,则表示可能该客户端曾经在早些时候收到过该消息,但并没有签收(acknowledged)。
- JMSType 消息类型的识别符。
- JMSExpiration 消息过期时间,等于QueueSender 的send 方法中的timeToLive 值或TopicPublisher 的publish 方法中的timeToLive 值加上发送时刻的GMT 时间值。如果timeToLive值等于零,则JMSExpiration 被设为零,表示该消息永不过期。如果发送后,在消息过期时间之后消息还没有被发送到目的地,则该消息被清除。
- JMSPriority 消息优先级,从0-9 十个级别,0-4 是普通消息,5-9 是加急消息。JMS 不要求JMS Provider 严格按照这十个优先级发送消息,但必须保证加急消息要先于普通消息到达。
3)消息体(Body)
JMS API 定义了5种消息体格式,也叫消息类型,你可以使用不同形式发送接收数据并可以兼容现有的消息格式,下面描述这5种类型:
消息类型 |
消息体 |
TextMessage |
java.lang.String对象,如xml文件内容 |
MapMessage |
名/值对的集合,名是String对象,值类型可以是Java任何基本类型 |
BytesMessage |
字节流 |
StreamMessage |
Java中的输入输出流 |
ObjectMessage |
Java中的可序列化对象 |
Message |
没有消息体,只有消息头和属性。 |