JMS的消息结构
Posted zengzil
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JMS的消息结构相关的知识,希望对你有一定的参考价值。
1. JMS消息有以下几部分组成:消息头、属性和消息体
2. 消息头包含消息的识别信息和路由信息,消息头包含的一些属性如下:
- JMSDestination:由send方法设置
- JMSDeliveryMode: 由send方法设置
- JMSExpiration:由send方法设置
- JMSPriority:由send方法设置
- JMSMessageId: 由send方法设置
- JMSTimestamp:由客户端设置
- JMSCorrelationId:由客户端设置
- JMSReplyTo: 由客户端设置
- JMSType: 由客户端设置
- JMSRedelivered:由JMS provider设置
3. 标准的JMS消息头包含以下属性:
- JMSDestination:消息发送的目的地。主要是指Queue和topic,自动分配
- JMSDeliveryMode:传送模式。有两种:持久模式和非持久模式。一条持久性的消息应该被传送“一次仅仅一次”,这就意味着如果JMS提供者出现故障,JMS消息不会丢失,它会在服务器恢复之后继续传递。一条非持久性的消息最多会传递一次,这就意味着服务器出现故障,该消息永久丢失。
- JMSExpiration:消息过期时间。等于Destination的send方法中的timeToLive值加上发送时刻的GMT时间值。如果timeToLive值等于零,则JMSExpiration被设置为零,表示该消息永不过期。如果发送后,在消息过期时间之后消息还没有被发送到目的地,则该消息被清除。自动分配
- JMSPriority:消息优先级。从0-9十级,0-4是普通消息,5-9是加急消息。JMS不要求JMS provider严格按照这十个优先级发送消息,但必须保证加急消息要优先于普通消息到达目的地。默认是4级。自动分配
- JMSMessageId:唯一识别每个消息的标志,由JMS provider产生,自动分配
- JMSTimestamp:一个JMS provider在调用send()自动设置的,它是消息被发送和接收的实际时间差。自动分配
- JMSCorrelationId:用来连接到另外一个消息。典型的应用在回复消息连接到原消息。在大多数情况下,JMSCorrelationId用于将一条消息标记为对JMSMessageId标识上的一个消息的应答。不过JMSCorrelationId是任何值不一定是JMSMessageId,有开发者设置
- JMSReplyTo:提供本消息回复消息的目的地,有开发者设置
- JMSType:消息类别的识别符。有开发者设置
10.JMSRedelivered:如果一个客户端端收到了设置了JMSRedelivered属性的消息,则表示客户端可能在早些时候曾经收到过该消息,但并没有被签收(acknowledge)。如果该消息重新发送,JMSRedelivered = true 反之 JMSRedelivered = false,自动设置
4. 消息体,JMS API 定义了5中消息体格式,也叫消息类型,可采用不同的形式发送接收数据,并可以兼容现有的消息格式。包括:TextMessage、MapMessage、BytesMessage、StreamMessage、ObjectMessage。
5. 消息属性,包含以下三种类型的属性:
1.应用程序设置或添加的属性
Message.setStringProperty("name", name)
2.JMS定义的属性
使用“JMSX”作为属性的前缀
Connection.getMetaData().JMSXPropertyNames(),方法返回所有支持的JMSX的属性名称
3.JMS提供商特定的属性
6. JMS定义的属性如下:
- JMSXUserID:发送消息的用户标识。发送时提供商设置
- JMSXAppID:发送消息的应用标识。发送时提供商设置
- JMSXDeliveryCount:转发消息重试次数。第一次是1,第二次是2,……,发送时提供商设置
- JMSXGroupID:消息所在消息组的标识,客户端设置
- JMSXGroupSeq:组内消息的序号,第一个是1,第二个是2,……,客户端设置
- JMSXProducerTXID:产生消息的事务的事务标识,发送时提供商设置
- JMSXConsumerTXID:消费消息的事务的事务标识,接收时提供商设置
- JMSXRcvTimestamp:JMS转发消息到消费者的时间,接收时提供商设置
- JMSXState:假定存在一个消息仓库,它储存了每个消息的单独拷贝,且这些消息从原始消息发送开始,每个拷贝的状态有:1(等待)、2(准备)、3(到期)或4(保留)。由于状态与生产者和消费者无关,所以它不是由它们来提供,它只和在仓库中查找消息相关,因此JMS消息没有提供相关的API,所以由提供商设置
以上是关于JMS的消息结构的主要内容,如果未能解决你的问题,请参考以下文章