JMS(十四):深入剖析一条JMS消息之消息属性
2016-03-08 00:00
246 查看
摘要: 消息属性
1. 消息属性类型:
a. 应用程序特定的属性,
b. JMS定义的属性,
c. 提供者特定的属性。
应用程序属性由应用程序开发者定义并应用到Message对象上,JMS扩展和提供者特定的属性大多是由JMS提供者自动添加的附加消息头。
a. 应用程序特定的属性:
其在消息传送之前进行设置,并不存在预先定义的应用程序属性,开发者可以自由定义能够满足他们需要的任何属性。 eg: 添加特定的属性,该属性标识正在发送消息的用户:
同样,在Message接口中定义了关于属性的这些方法, 比如:boolean,byte,short,int,long,float,double 或 String类型。 而该接口为每种类型的属性值都提供了取值函数或赋值函数的方法。 eg:
一旦一条消息发布或发送以后,它就变成了只读属性,消费者或生产者都无法修改它的属性。否则将抛出异常。不过通过调用clearProperties()方法后,就可以修改消息的属性,该方法将删除一条消息的所有属性,以便能够添加进新的属性,
Message接口中的getPropertyNames()方法可以用于获取该消息所有属性的名称枚举,而这些名称就可供属性取值函数方法使用,以获取属性值, eg:
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提供者都可以定义一组任何类型的私有属性,这些属性可以由客户端或提供者自动设置。
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提供者都可以定义一组任何类型的私有属性,这些属性可以由客户端或提供者自动设置。
相关文章推荐
- VMware 12 Pro 安装 OS X 10.11
- [M0]按键多次点击检测(原理)
- 与Java Web Service相关的若干概念(JAX-WS,JAX-RS)
- 原型模式--android开发模式
- IOS开发—App 在 IOS 8 的simulator运行时,定位卡死bug解决
- App云端打包失败常见问题汇总
- OC高效率52之以弱引用避免保留环
- 网上资源URL
- 为你讲解网站运营中比较重要的几个因素
- KeyMob:努力帮助应用开发者最大化移动广告收益
- KeyMob移动广告聚合:移动应用广告管理工具
- KeyMob移动广告之广告聚合篇
- 广告聚合:KeyMob移动广告聚合平台的特色功能简介,KeyMob特色功能
- KeyMob移动广告聚合平台嵌入几百款APP日展现次数过万
- KeyMob移动广告聚合的新玩法-应用交叉推广
- IOS博客项目搭建-08-项目使用本地Git
- F5 IoT Ready平台
- +速物联网,F5在交通行业的应用!
- F5 让红包安全的飞
- Servlet 工作原理解析