友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
喜书网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

JMS简明教程(PDF格式)-第8章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




    为了保证可移植性,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�4 看作普通优先级,5�9 看作加急优先级。  

    JMS 没有要求提供商严格地实现消息的优先级顺序;但是,它应当尽力在普通消息之前 

转发加急消息。  



3。4。11 如何设置消息头的值  



                           表3�1 发送时设置消息头字段的值  



                 头字段                                       设置者  



             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 值。  

     设置为行总的类型,读作列中的类型。  

                                     表3�2 属性值转换  



          boolean   byte       short      int       long     float   double   String  



boolean      ×                                                                    ×  



  byte                 ×         ×         ×         ×                            ×  



  short                          ×         ×         ×                            ×  



   int                                     ×         ×                            ×  



  long                                               ×                            ×  



  float                                                        ×         ×        ×  



 double                                                                  ×        ×  



 String      ×         ×         ×         ×         ×         ×         ×        ×  



                                                                                  21 / 66  

  


…………………………………………………………Page 22……………………………………………………………

                                      



3。5。5 属性值作为对象  



    除了特定类型的属性有set/get 方法外,JMS 提供了setObjectProperty/getObjectProperty 

方法。这两个方法支持设置使用对象化的原始类型的属性。它们用于在运行时来决定属性类 

型而不是在编译时决定。它们支持同样的属性值转换。  

    setObjectProperty 方法接受Boolean,Byte,Short,Integer,Long,Float,Double 和String 

的值。企图使用其他的类必须抛出MessageFormatException。  

    getObjectProperty 方法只返回null,Boolean,Byte,Short,Integer,Long,Float,Double 

和String 的值。如果指定的属性名不存在则返回null。  



3。5。6 属性迭代  



    没有定义属性值的排序。为了通过消息的属性值来迭代,那么使用 getPropertyNames 

来取得所有的属性名,然后使用不同的属性get 方法来取出它们的值。  

    方法getPropertyNames 没有返回JMS 标准头字段的名字。  



3。5。7 清除消息属性的值  



    通过clearProperties 方法来删除消息的属性。这会使消息有一个空的属性集。然后可以 

创建和读取新的属性条目。  

    清除消息的属性条目不会清理消息体的值。  

    一旦私有属性条目被添加到消息中,则JMS 没有提供删除它的途径。  



3。5。8 不存在的属性  



    按名字获取一个还没有被赋值的属性值则按照属性被赋了null 值来处理。  



3。5。9 JMS 定义的属性  



    JMS 保留了“JMSX ”作为JMS 属性名的前缀。这些属性都在表3�3  中。新的JMS 定义 

的属性可能在后续版本中增加。  

    除非说明否则支持这些属性是可选的。ConnectionMetaData。getJMSXPropertyNames()方 

法返回所有连接支持的JMSX 属性的名字。  

    无论连接是否支持JMSX 属性,它们都可以在消息选择器中使用。如果消息中没有这些 

属性,那么它们与其他缺席属性一样看待。  

    在特定消息中,存在JMS  定义的属性,它们是由JMS 提供商根据如何控制属性的使用 

来设置的。根据管理或其它规则,可以在某些消息中包含它们在其他消息中忽略它们。  

                             表3�3 JMS 定义的属性  



       名字                类型               设置者                 用法  



    JMSXUserID           String       发送时提供商设置  发送消息的用户标识 



    JMSXAppID            String       发送时提供商设置  发送消息的应用标识 



                                                                   22 / 66  

  


…………………………………………………………Page 23……………………………………………………………

                                    



 JMSXDeliveryCount      int         发送时提供商设置  转发消息重试次数; 

                                                    第一次是1,第二次 

                                                    是2,…  



   JMSXGroupID         String           客户端         消息所在消息组的标 

                                                    识  



   JMSXGroupSeq         int             客户端         组内消息的序号;第 

                                                    一个消息是1,第二 

                                                    个是2,…  



 JMSXProducerTXID      String       发送时提供商设置  产生消息
返回目录 上一页 下一页 回到顶部 赞(0) 踩(0)
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!