JMS学习笔记(三)——JMS消息模型

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_PERSISTENTPERSISTENT 表示该消息一定要被送到目的地,否则会导致应用错误。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

没有消息体,只有消息头和属性。

猜你喜欢

转载自lizhao6210-126-com.iteye.com/blog/1829081
jms