JMS消息

消息是整个JMS规范最为重要的部分。一个JMS应用程序中的所有数据和事件都是使用消息进行通信的,同时JMS的其余部分也在消息传输服务。

一个 Message 对象有3个部分:消息头,消息属性和消息数据本身,也称有效负载或消息体。

    消息头:每条消息都有一组标准的消息头。每个消息头都由一组取值函数和赋值函数方法所标识。消息头分为两大类:自动分配消息头和开发者分配消息头。

自动分配消息头:大多数消息头都是自动分配的,在传送消息时,消息头的值由JMS提供者来设置,因此开发者使用  setJMS<HEADER>() 方法就会被忽略。不过一些消息头可以再创建 Session 和 MessageProvider 时,有开发者通过编程方式来设置。以下是自动分配消息头:

JMSDestination: 该消息头是使用一个Topic 或 Queue 对象来标识目的地。

JMSDeliveryMode: 传送模式。在JMS中消息有两种传输模式:持久模式和非持久模式。一条持久消息应该被传送“一次且仅一次”,一条非持久消息最多被传送一次。

JMSMssageID: 消息的唯一标识(其实现取决于具体厂商),是个String类型的值。

JMSTimestamp: JMS提供者接受消息的时间,而不是该消息实际传送的时间,long 型。

JMSExpiration: 消息对象的有效期,毫秒为单位。

JMSRedelivered: 如果消息被重传则为 true,否则为 false。

JMSPriority: 消息的优先级,共两类:0-4普通优先级,4-9加急优先级。

开发者消息头:必须由消息生产者在传送消息前显式设置:

JMSReplyto: 在某些情况下,一个JMS消息生产者可能会要求消费者对一条消息做出应答。JMSReplyto 消息头包含了一个 javax.jms.Destination,标明了JMS消费者应该应答的地址。

JMSCorrelationID: 用于将当前消息和先前某些消息或应用程序特定的ID关联起来。大多数情况下,用于将一条消息标记为对 JMSMessageID 标识的一条消息的应答。

JMSType: 可选消息头。标识消息结构和有效负载。

    消息属性:像消息的附加消息头一样。允许开发者添加有关消息的不透明附加信息。它们还可以暴露消息选择器在消息过滤时使用的数据。消息的属性可以是String、boolean、byte、double、int、float 或 long类型。消息属性有3中基本类型:应用程序特定的属性、JMS定义的属性和提供者特定的属性。

应用程序特定的属性:由应用程序开发者定义的所有属性可以作为一个应用程序特定的属性。应用程序属性在消息传送之前进行设置。并不存在预先定义的应用程序属性,开发者可以自由定义能满足他们需要的任何属性。javax.jms.Message 接口为每种类型的属性值都提供了取值函数和赋值函数方法。

package javax.jms;

public interface Message {
// getter and setter
}

JMS定义的属性

JMSXUserID

JMSXAppID

JMSXProduceTXID

JMSXConsumerTXID

JMSXRcvTimestamp

JMSXDeliveryCount

JMSXState

JMSXGroupID

JMSXGroupSeq

提供者定义的属性:每个提供者(JMS的实现者)都可以定义一组私有属性,这些属性可以由客户端或提供者自动设置。必须以JMS为前缀。

    消息类型:JMS定义了6中JMS提供者必须支持的接口类型(以下就不做具体展开了,只列举以下):

Message

TextMessage

ObjectMessage

BytesMessage

StreamMessage

MapMessage


参考资料:

《Java消息服务》第二版, Mark Richards, Richard Monson-Haefel & David A. Chappell 著, 闫怀志 译。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值