您的位置:首页 > 其它

JMS(十四):深入剖析一条JMS消息之消息属性

2016-03-08 00:00 246 查看
摘要: 消息属性

1. 消息属性类型:

a. 应用程序特定的属性,

b. JMS定义的属性,

c. 提供者特定的属性。


应用程序属性由应用程序开发者定义并应用到Message对象上,JMS扩展和提供者特定的属性大多是由JMS提供者自动添加的附加消息头。

a. 应用程序特定的属性:

其在消息传送之前进行设置,并不存在预先定义的应用程序属性,开发者可以自由定义能够满足他们需要的任何属性。 eg: 添加特定的属性,该属性标识正在发送消息的用户:

TextMessage message = pubSession.createTextMessage();
message.setText(text);
message.setStringProperty("uname",uname);  // 也可用于根据发布者身份对消息进行过滤。
publisher.publish(message);

同样,在Message接口中定义了关于属性的这些方法, 比如:boolean,byte,short,int,long,float,double 或 String类型。 而该接口为每种类型的属性值都提供了取值函数或赋值函数的方法。 eg:

public int getIntProperty(String arg0) throws JMSException ;

public void setIntProperty(String arg0, int arg1) throws JMSException;

一旦一条消息发布或发送以后,它就变成了只读属性,消费者或生产者都无法修改它的属性。否则将抛出异常。不过通过调用clearProperties()方法后,就可以修改消息的属性,该方法将删除一条消息的所有属性,以便能够添加进新的属性,

Message接口中的getPropertyNames()方法可以用于获取该消息所有属性的名称枚举,而这些名称就可供属性取值函数方法使用,以获取属性值, eg:

public void  onMessage(Message message) throws JMSException{
Enumeration propertyNames = message.getPropertyNames();
while(propertyNames.hasMoreElements() ){
String name  = (String) propertyNames.nextElement();
Object value = message.getObjectProperty(name);
}
}


b. JMS定义的属性:

JMS定义的属性具有和应用程序属性相同的特性,除了前者大多数在消息发送时由JMS提供者来设置外。JMS定义的属性可以作为可选的JMS消息头。下面是JMS定义的9个属性:

JMSXUserID:

提供者在发送消息时自动设置的String值。可为客户端分配一个用户ID,(与该属性有关的值)。

JMSAppID:

提供者在发送消息时自动设置的String值。可为特定的JMS应用陈旭分配一个标识符,他是使用同一组目的地通信的一组消费者和订阅者。

JMSXProducerTXID 与 JMSXConsumerTXID:

前者由提供者在发送消息时设置, 后者由提供者在接收消息时设置。,系统中的每一个事务都有一个唯一的身份,它可以使用这些属性从生产者或消费者获得。

JMSRcvTimestamp:

接收消息时自动这只的原始类型long值,它表示消费者接受消息的UTC。即国际协调时间。

JMSXDeliveryCount:

接收消息时自动设置的int值。如果消费者没有明确地确认一条消息,该消息就可能会重新传送,这个属性保存了消息服务器视图想该特定消费者传送消息的总次数。

JMSXState:

JMS提供者自动设置的int值。而对消费者或生产者不可用。

接收消息时分配的JMS定义的属性,(JMSXConsumerTXID, JMSXRcvTimestamp, JMSXDeliveryCount) 对消息生产者不可用,它只对消费者可用。

两个组属性:


JMSXGroupID:

这个属性是JMS客户端在发送消息之前设置的String值。它是该消息所属组的身份标识。

JMSXGroupSeq:

是JMS客户端在发送消息之前设置的原始int类型。它是该消息在消息组内的序列号。

c. 提供者特定的属性:

每个JMS提供者都可以定义一组任何类型的私有属性,这些属性可以由客户端或提供者自动设置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: