消息由三部分组成:消息头、属性和主体。必须了解此结构,才能正确编写消息和配置某些消息传送行为。
消息头是每条 JMS 消息所必需的。消息头包含十个预定义字段,表 2–3 中列出并介绍了这些字段。
表 2–3 JMS 定义的消息头
头字段 |
描述 |
---|---|
在 0(低)到 9(高)的范围内指定消息的优先级。(默认情况下由提供者设置,也可以由客户端为生成方或为单独的消息显式设置。) |
|
从表中可以看出,消息头字段有多种用途:标识消息、配置消息的路由以及提供有关消息处理的信息等。
其中最重要的字段之一 JMSDeliveryMode,用于决定消息传送的可靠性。该字段指示一条消息是否为持久性消息。
部分消息头字段由提供者(代理或客户端运行时环境)设置,其他头字段则由客户端设置。消息生成方可能需要配置头字段值,才能实现某些消息传送行为;消息使用方可能需要读取头字段值,才能了解消息的路由方式以及可能需要对它执行哪些进一步处理。
头字段(JMSDeliveryMode、JMSExpiration 和 JMSPriority)可以在三个不同的级别上进行设置:
对于通过从连接工厂派生的每个连接发出的消息。
对于生成的每条消息。
对于特定消息生成方发出的所有消息。
如果这些字段在多于一个级别上进行设置,则为连接工厂设置的值将覆盖为单条消息设置的值;为给定消息设置的值将覆盖为消息生成方设置的值。
消息头字段的固定名称因语言实现而异。有关详细信息,请参见《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 消息主体类型
类型 |
描述 |
---|---|
主体中包含 Java 基元值流的消息。它的填充和读取均按顺序进行。 |
|
主体中包含一组名/值对的消息。没有定义条目顺序。 |
|
主体中包含 Java 字符串的消息,例如 XML 消息。 |
|
主体中包含序列化 Java 对象的消息。 |
|
主体中包含连续字节流的消息。 |
|
包含消息头和属性但不包含主体的消息。 |
Java 客户端可以对属性进行设置,使客户端运行时环境压缩要发送的消息的主体。而使用方一端的 Message Queue 运行时环境会在传送消息前先解压缩该消息。