JMS的消息结构

Posted zengzil

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JMS的消息结构相关的知识,希望对你有一定的参考价值。

1.  JMS消息有以下几部分组成:消息头、属性和消息体

2.  消息头包含消息的识别信息和路由信息,消息头包含的一些属性如下:

  1. JMSDestination:由send方法设置
  2. JMSDeliveryMode: 由send方法设置
  3. JMSExpiration:由send方法设置
  4. JMSPriority:由send方法设置
  5. JMSMessageId: 由send方法设置
  6. JMSTimestamp:由客户端设置
  7. JMSCorrelationId:由客户端设置
  8. JMSReplyTo: 由客户端设置
  9. JMSType: 由客户端设置
  10. JMSRedelivered:由JMS provider设置

3. 标准的JMS消息头包含以下属性:

  1. JMSDestination:消息发送的目的地。主要是指Queue和topic,自动分配
  2. JMSDeliveryMode:传送模式。有两种:持久模式和非持久模式。一条持久性的消息应该被传送“一次仅仅一次”,这就意味着如果JMS提供者出现故障,JMS消息不会丢失,它会在服务器恢复之后继续传递。一条非持久性的消息最多会传递一次,这就意味着服务器出现故障,该消息永久丢失。
  3. JMSExpiration:消息过期时间。等于Destination的send方法中的timeToLive值加上发送时刻的GMT时间值。如果timeToLive值等于零,则JMSExpiration被设置为零,表示该消息永不过期。如果发送后,在消息过期时间之后消息还没有被发送到目的地,则该消息被清除。自动分配
  4. JMSPriority:消息优先级。从0-9十级,0-4是普通消息,5-9是加急消息。JMS不要求JMS provider严格按照这十个优先级发送消息,但必须保证加急消息要优先于普通消息到达目的地。默认是4级。自动分配
  5. JMSMessageId:唯一识别每个消息的标志,由JMS provider产生,自动分配
  6. JMSTimestamp:一个JMS provider在调用send()自动设置的,它是消息被发送和接收的实际时间差。自动分配
  7. JMSCorrelationId:用来连接到另外一个消息。典型的应用在回复消息连接到原消息。在大多数情况下,JMSCorrelationId用于将一条消息标记为对JMSMessageId标识上的一个消息的应答。不过JMSCorrelationId是任何值不一定是JMSMessageId,有开发者设置
  8. JMSReplyTo:提供本消息回复消息的目的地,有开发者设置
  9. 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定义的属性如下:

  1. JMSXUserID:发送消息的用户标识。发送时提供商设置
  2. JMSXAppID:发送消息的应用标识。发送时提供商设置
  3. JMSXDeliveryCount:转发消息重试次数。第一次是1,第二次是2,……,发送时提供商设置
  4. JMSXGroupID:消息所在消息组的标识,客户端设置
  5. JMSXGroupSeq:组内消息的序号,第一个是1,第二个是2,……,客户端设置
  6. JMSXProducerTXID:产生消息的事务的事务标识,发送时提供商设置
  7. JMSXConsumerTXID:消费消息的事务的事务标识,接收时提供商设置
  8. JMSXRcvTimestamp:JMS转发消息到消费者的时间,接收时提供商设置
  9. JMSXState:假定存在一个消息仓库,它储存了每个消息的单独拷贝,且这些消息从原始消息发送开始,每个拷贝的状态有:1(等待)、2(准备)、3(到期)或4(保留)。由于状态与生产者和消费者无关,所以它不是由它们来提供,它只和在仓库中查找消息相关,因此JMS消息没有提供相关的API,所以由提供商设置

以上是关于JMS的消息结构的主要内容,如果未能解决你的问题,请参考以下文章

基于JMS的消息传送

JMS(Java消息服务)入门教程

JMS编程模型

JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中

jms及active(jdk api)的实现

消息中间件--ActiveMQ&JMS消息服务