Sun Java System Message Queue 3.7 UR1 技术概述

消息

消息由三部分组成:消息头、属性和主体。必须了解此结构,才能正确编写消息和配置某些消息传送行为。

消息头

消息头是每条 JMS 消息所必需的。消息头包含十个预定义字段,表 2–3 中列出并介绍了这些字段。

表 2–3 JMS 定义的消息头

头字段 

描述 

JMSDestination

指定消息要发送到的目的地对象的名称。(由提供者设置。)

JMSDeliveryMode

指定消息是否为持久性消息。(默认情况下由提供者设置,也可以由客户端为生成方或为单独的消息显式设置。)

JMSExpiration

指定消息的到期时间。(默认情况下由提供者设置,也可以由客户端为生成方或为单独的消息设置。)

JMSPriority

在 0(低)到 9(高)的范围内指定消息的优先级。(默认情况下由提供者设置,也可以由客户端为生成方或为单独的消息显式设置。)

JMSMessageID

指定消息在提供者安装的上下文中的唯一 ID。(由提供者设置。)

JMSTimestamp

指定提供者接收消息的时间。(由提供者设置。)

JMSCorrelationID

客户端用于定义两条消息之间的对应性的值。(由客户端在需要时设置。)

JMSReplyTo

指定使用方应发送回复的目的地。(由客户端在需要时设置。)

JMSType

可由消息选择器评估的值。(由客户端在需要时设置。)

JMSRedelivered

指定消息是否已传送但尚未得到确认。(由提供者设置。)

从表中可以看出,消息头字段有多种用途:标识消息、配置消息的路由以及提供有关消息处理的信息等。

其中最重要的字段之一 JMSDeliveryMode,用于决定消息传送的可靠性。该字段指示一条消息是否为持久性消息。

部分消息头字段由提供者(代理或客户端运行时环境)设置,其他头字段则由客户端设置。消息生成方可能需要配置头字段值,才能实现某些消息传送行为;消息使用方可能需要读取头字段值,才能了解消息的路由方式以及可能需要对它执行哪些进一步处理。

头字段(JMSDeliveryMode、JMSExpirationJMSPriority)可以在三个不同的级别上进行设置:

如果这些字段在多于一个级别上进行设置,则为连接工厂设置的值将覆盖为单条消息设置的值;为给定消息设置的值将覆盖为消息生成方设置的值。

消息头字段的固定名称因语言实现而异。有关详细信息,请参见《Sun Java System Message Queue 3.7 UR1 Developer’s Guide for Java Clients》《Sun Java System Message Queue 3.7 UR1 Developer’s Guide for C Clients》

消息属性

消息还可以包含称为属性的可选头字段,这类字段以属性名/属性值对的形式来指定。客户端和提供者可以使用属性来扩展消息头,并可以在其中包含有助于客户端或提供者标识和处理消息的任何信息。通过消息属性,接收客户端可以只传送符合给定标准的消息。例如,使用方客户端可能请求获得有关新泽西州兼职雇员工资单的消息。提供者将不会传送不符合指定标准的消息。

JMS 规范定义了九个标准属性。其中某几个属性由客户端设置,另外几个由提供者设置。属性的名称以保留字符 "JMSX" 开头。客户端或提供者可以使用这些属性决定消息的发送者、消息的状态以及消息传送的频率和时间。这些属性有助于提供者提供路由消息和诊断信息。

Message Queue 也定义消息属性,它们用于标识压缩消息以及在无法传送消息时应如何处理消息。有关详细信息,请参见《Sun Java System Message Queue 3.7 UR1 Developer’s Guide for Java Clients》中的“Managing Message Size”

消息主体

消息主体包含客户端需要交换的数据。

JMS 消息类型决定了主体可以包含哪些内容以及使用方应如何处理主体,如表 2–4 中所指定的那样。Session 对象包含各类消息主体的创建方法。

表 2–4 消息主体类型

类型 

描述 

StreamMessage

主体中包含 Java 基元值流的消息。它的填充和读取均按顺序进行。 

MapMessage

主体中包含一组名/值对的消息。没有定义条目顺序。 

TextMessage

主体中包含 Java 字符串的消息,例如 XML 消息。 

ObjectMessage

主体中包含序列化 Java 对象的消息。 

BytesMessage

主体中包含连续字节流的消息。 

Message

包含消息头和属性但不包含主体的消息。 

Java 客户端可以对属性进行设置,使客户端运行时环境压缩要发送的消息的主体。而使用方一端的 Message Queue 运行时环境会在传送消息前先解压缩该消息。