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

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

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




   有两个原因要限制并发访问Session 。第一个,Session 是支持事务的JMS 实体。实现多 

线程的事务是非常困难的。第二,Session 支持异步的消费消息。重要的是JMS 不要求用于 

消费异步消息的客户端代码有处理多个并发的消息的能力。另外,如果Session 被设置有多 

个异步的消费者,那么不强迫客户端处理这些并发执行的分散的消费者。这些约束使得通常 

的客户端更加容易地使用JMS 。更专业的客户端可以通过使用多个会话来获得他们期望的并 

非性。  



2。9  触发式客户端  



   某些客户端被设计成被周期性的唤醒来处理等待它们的消息。一个基于消息的应用触发 

机制常和客户端的风格一起使用。触发器通常是等待消息的起点,等等。  

   JMS 没有提供触发客户端执行的机制。某些提供商可以通过它们的管理工具提供这样的 

触发机制。  



2。10  请求/ 回复  



   JMS  提供了 JMSReplyTo  消息头字段来指定回复的消息应当被发送到的目的地。回复的 

JMSCorrelationID  头字段可以被用于引用原始的请求。参见 3。4  章节“消息头字段”了解详 

细信息。  

   另外,JMS 提供了创建临时队列和主题的功能,它可以用作回复的唯一目的地。  

   企业消息产品支持许多请求/ 回复风格,从简单的“一个消息请求产生一个消息回复” 

到“一个消息请求产生一串回复,回复消息来自多个应答者”。JMS  不仅架构了一个特定的 

请求/ 回复抽象,而且提供了基本的工具,许多企业消息产品可以基于它来构建。  

   为了方便,JMS 为PTP 和Pub/Sub 域定义了请求/ 响应帮助类(这些类用JMS 实现),它 

实现了请求/ 回复的基本形式。JMS 提供商和客户端可以提供更加专业的实现。  



3  JMS 消息模型  



3。1  背景  



   企业消息产品把消息看作是轻量级的实体,它由消息头和消息体组成。消息头包含了用 

于消息路由和标识的字段;消息体包含了被发送的应用数据。  

   通常情况下,消息的定义随产品的不同有很大的差别。主要的差别是消息头的内容和语 

义。某些产品使用自描述的规范的消息数据编码;其他的可能将数据认为是完全不透明的。 

某些产品为能被用于标识和解释消息内容的消息描述提供了存储池;其他的就没有。  

   对JMS 来讲捕获偶尔冲突的消息模型组合的范围是非常困难的。  



                                                                16 / 66  

  


…………………………………………………………Page 17……………………………………………………………

                                     



3。2  目标  



    JMS 消息模型有下列目标:  

    z  提供一个单一的统一的消息API 。  

    z  提供一个API ,它能创建匹配现存的非JMS 应用使用的格式的消息。  

    z  支持异构应用的开发,异构应用涵盖操作系统、机器架构和计算机语言。  

    z  支持包含java 对象的消息。  

    z  支持包含可扩展标签语言(XML )页面的消息(参见http://w3。org/XML)。(译 

       者注:就是消息是XML )  



3。3  JMS 消息  



    JMS 消息由以下部分组成:  

    z  消息头——所有的消息都支持相同的头字段集。头字段包含了客户端和提供商都要 

       使用的用于标识和路由消息的值。  

    z  属性——除了标准的头字段外,消息提供了一个内置的功能来向消息增加可选的头 

       字段。  

          应用专有属性—为消息增加应用专有的头字段提供的机制。  

          标准属性—JMS 定义的一些标准属性,它们相当于可选的头字段。  

          提供商专有属性—在集成JMS 客户端和JMS 提供商本地客户端时可能会用到 

           提供商专有的属性。JMS 为这些属性定义了命名规范。  

    z  消息体——JMS 定义了几个消息体类型,这些类型覆盖了大部分当前使用的消息风 

       格。  



3。4  消息头字段  



    下面的子章节描述了所有的消息头字段。消息的头被完整地转发到所有的JMS 客户端。 

JMS 没有定义那些转发到非JMS 客户端的头字段。  



3。4。1 JMSDestination  



    JMSDestination 包含了消息被发往的目的地。  

    当消息被发送时,忽略这个字段。在发送完成后,这个字段容纳由发送方法指定的目的 

地对象。  

    当消息被接收时,它的目的地的值必须等于发送时赋给的值。  



3。4。2 JMSDeliveryMode  



    JMSDeliveryMode 包含了消息发送时指定的转发模式。  

    当消息被发送时,这个字段被忽略。在完成发送后,它包含了由发送方法指定的转发模 

式。  



                                                                    17 / 66  

  


…………………………………………………………Page 18……………………………………………………………

                                    



    参见4。7 章节“消息转发模式”了解更详细的信息。  



3。4。3 JMSMessageID  



   JMSMessageID 包含了一个用于唯一标识由提供商发送的每个消息。  

    当消息被发送时,JMSMessageID     被忽略。当发送方法返回时,这个字段包含了一个提 

供商赋予的值。  

   JMSMessageID  是一个 String 值,它用于在历史存储池中唯一标识消息的主键。唯一性 

的确切范围由提供商定义。它至少应当覆盖一个提供商安装的所有的消息,这里一个安装被 

连接到一系列消息路由器。  

    所有的 JMSMessageID  值必须以前缀“ID:”开始,没有要求跨不同提供商的消息ID 值 

的唯一性。  

    由于消息ID 需要花费时间来创建并增加了消息的长度,因此如果消息已经被给了一个 

暗示说英语不使用消息ID,那么JMS 提供商可以优化过长的消息。JMSMessageProducer 提 

供取消消息ID 的暗示。当客户端设置消息生产者不使用消息ID 时,它就是说它生产的消息 

不依赖消息 ID  的值。如果JMS  提供商接受这个暗示,那么这些消息的消息 ID 必须设置为 

null;如果提供商不接受这个暗示,那么必须为消息ID 设置一个唯一的值。  



3。4。4 JMSTimestamp  



   JMSTimestamp  包含了消息被发送的时间。但不是消息被真正转发的时间,因为真正的 

发送可能由于事务或其他的客户端消息排队而比较晚。  

    当一个消息被发送时,JMSTimestamp  被忽略。当发生方法返回时,这个字段包含了调 

用和返回之间的某个时间值。它的格式是通常的java 毫秒时间值。  

    由于时间戳需要花时间来创建,并增加了消息的长度,如果应用暗示不使用时间戳,那 

么某些JMS 提供商可以优化消息的过载。JMS MessageProducer 可以暗示不使用时间戳。当 

客户端设置生产者不使用时间戳,那么它就是说它生产的消息不依赖于时间戳的值。如果 

JMS 提供商接受了这种暗示,那么这些消息的时间戳必须被设置成0 ;如果提供商不接受这 

种暗示,则必须设置时间戳的值。  



3。4。5 JMSCorrelationID  



    客户端可以使用JMSCorrelationID 来链接消息。典型的用法就是将响应消息和请求消息 

链接起来。  

   JMSCorrelationID 可以容纳下列的类型值:  

    z  提供商专有的消息ID  

    z  应用专有的String  

    z  提供商本地的byte''值  

    由于每个由JMS 提供商发送的消息都被赋予了一个消息ID 值,所以通过消息ID 来链接 

消息是非常方便的。所有的消息ID 值都必须以“ID:”作为前缀。  

    在某些情况下,应用(有几个客户端组成)需要使用应用专有的值来链接消息。例如, 

应用可以使用JMSCorrelationID 来容纳一个引用一些外部信
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!