《JMS简明教程(PDF格式)》第10章


应用可以使用JMSCorrelationID 来容纳一个引用一些外部信息的值。应用专有的值不必以“ID:” 
18 / 66
…………………………………………………………Page 19……………………………………………………………
为前缀;这是提供商生成消息ID 值时的保留字符。
如果提供商支持关联 ID 的本地概念(native ),那么 JMS 客户端可能需要给 
JMSCorrelationID 赋特定的值来匹配非JMS 客户端期望的值。Byte''值就是用于这个目的。没 
有本地关联 ID 的 JMS 提供商不要求支持 byte''值(注:setJMSCorrelationIDAsBytes()和 
getJMSCorrelationIDAsBytes() 可以抛出 java。lang。UnsupportedOperationException )。为 
JMSCorrelationID 使用byte''值是不可移植的。
3。4。6 JMSReplyTo
当消息被发送时,JMSReplyTo 包含一个由客户支持的目的地。它是回复消息应当被发送 
到的目的地。
JMSReplyTo 为 null 的消息可能是某个事件的通知消息或它们仅仅是发送者认为是有兴 
趣的数据。
JMSReplyTo 有值得消息通常是期望响应的消息。响应是可选的;由客户端来决定。
3。4。7 JMSRedelivered
如果客户端收到一个设置了JMSRedelivered 指示的消息,那么很可能但不能保证这个消 
息被转发过但没有确认。通常情况下,提供商必须设置JMSRedelivered ,无论它是否正在重 
新转发一个消息。如果JMSRedelivered 设置为true ,那么它告诉消费应用这个消息可能已经 
被转发过,应用应当引起注意以免重复处理。参加4。4。11 章节“消息确认”了解更详细的信 
息。
这个头字段对发送没有意义,不会被发送方法赋值。
3。4。8 JMSType
JMSType 包含了由客户端在发送消息时提供的消息类型标识。
某些JMS 提供商使用消息存储池,这个池包含了由应用发送的消息的定义。Type 字段 
可以引用提供商池内的消息定义。
JMS 没有定义标准的消息定义池,也没有定义定义的命名策略。
某些消息系统要求为每个应用消息创建消息类型定义并指定每个消息的类型。为了和这 
样的JMS 提供商一起工作,无论应用是否使用它JMS 客户端都应当为JMSType 赋值。这保 
证为那些需要这个字段的提供商提供正确的设置。
为了保证可移植性,JMS 客户端应当使用抽象符合为JMSType 赋值,以便它能在安装时 
被配置成当前提供商消息存储池中定义的值。如果使用字符串,对某些 JMS 提供商来说他 
们可以不是有效的类型名。
3。4。9 JMSExpiration
当消息被发送时,它的到期时间是在发生方法中指定的存活时间和当前GMT 值之和。 
在从发送方法返回时,消息的 JMSExpiration 头字段包含这个到期的值。当消息被接收时, 
它的JMSExpiration 中的值就是发送时的值。
19 / 66
…………………………………………………………Page 20……………………………………………………………
如果存活时间指定为0,那么表明消息没有到期时间。
当当前GMT 已经晚于未转发消息的到期时间时,应当销毁这个消息。JMS 没有定义消 
息到期时的通知。
3。4。10 JMSPriority
JMSPriority 头字段包含了消息的优先级。
当消息被发送时,这个字段被忽略。在完成发送后,它容纳了由发送方法指定的优先级 
值。
JMS 定义了十个优先级值,0 是最低的优先级,9 是最高的优先级。另外,客户端应当 
将0? 看作普通优先级,5? 看作加急优先级。
JMS 没有要求提供商严格地实现消息的优先级顺序;但是,它应当尽力在普通消息之前 
转发加急消息。
3。4。11 如何设置消息头的值
表3? 发送时设置消息头字段的值
头字段 设置者
JMSDestination Send Method
JMSDeliveryMode Send Method
JMSExpiration Send Method
JMSPriority Send Method
JMSMessageID Send Method
JMSTimestamp Client
JMSCorrelationID Client
JMSReplyTo Client
JMSType Client
JMSRedelivered Provider
3。4。12 重载消息头字段
JMS 可以让管理员配置 JMS 来重载客户端特有的 JMSDeliveryMode 、JMSExpiration 和 
JMSPriority 的值。如果重载了,头字段的值必须是管理员指定的值。
JMS 没有特别定义管理员如何重装这些头字段的值。没有要求支持JMS 提供商支持这个 
管理选项。
3。5 消息属性
除了这里定义的头字段外,Message 接口有一个内置的功能,这个功能支持属性值。这 
个功能为消息增加可选头字段提供了一种机制。
属性可以让客户端通过消息选择器(参见章节 3。8 “消息选择”)来让JMS 提供商根据 
20 / 66
…………………………………………………………Page 21……………………………………………………………
应用特有的规则来选择消息。
3。5。1 属性名
属性名必须遵循消息选择器标识的规则。参见章节3。8。1。1 “消息选择器语法”了解更详 
细信息。
3。5。2 属性值
属性的值可以是boolean,byte,short,int,long,float ,double 和String 。
3。5。3 属性的使用
在发送消息之前设置属性值。当客户端接收到一个消息时,它的属性是只读模式。如果 
客户端企图修改属性,那么抛出MessageNotWriteableException。
可以在消息体中保存一份属性值的副本,也可以不保存。尽管 JMS 没有定义属性哪些 
作为属性或哪些不应当作为属性的策略,但应用开发者应当注意 JMS 提供商很可能在消息 
体内处理数据的效率比处理在属性中的数据高。为了提高性能,应用应当只在需要客户化消 
息头时才使用消息属性。客户化消息头的主要原因是为了支持客户化的消息选择。
参见章节3。8 “消息选择”来了解JMS 消息属性的详细信息。
3。5。4 属性值转换
属性支持下述的转换表。打标记的情况必须支持。没有打标记的情况必须抛出 
MessageFormatException。如果数值的valueOf 方法认为传入的String 不是有效的数值,那么 
String 到数值的转换必须抛出java。lang。NumberFormatException 。企图读取一个 null 值作为 
java 原始类型必须看作是调用原始类型的valueOf(String)转换方法来转换null 值。
设置为行总的类型,?
小说推荐
返回首页返回目录