JMS(十四):深入剖析一条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提供者都可以定义一组任何类型的私有属性,这些属性可以由客户端或提供者自动设置。

            

    

        

    



你可能感兴趣的:(JMS(十四):深入剖析一条JMS消息之消息属性)