1.消息识别
如果客户机指定JMS 使用者的消息应被显式识别的话,那么JMS 消息也支持使用识别方法。如果客户机使用自动识别的话,那么将忽略识别调用。
消息识别有三种类型。消息识别的类型是在会话创建时指定的。
(1)AUTO_ACKNOWLEDGE
在AUTO_ACKNOWLEDGE 模式中,当消息成功从调用返回到接收器,或消息使用者注册的处理消息的消息侦听器成功返回时,消息会话将自动识别消息。
(2)CLIENT_ACKNOWLEDGE
利用CLIENT_ACKNOWLEDGE 模式,客户机通过调用消息上的识别方法显式并确认消息。当使用CLINET_ACKNOWLEDGE 模式时,我们在处理消息过程中必须注意避免大量未识别消息的积累,未识别消息的积累可能导致资源耗尽,带来失败。
(3)DUPS_OK_ACKNOWLEDGE
DUPS_OK_ACKNOWLEDGE 模式命令会话迟钝地确认消息送达。如果JMS 失败的话,其结果就可能是重复消息发送。允许处理重复消息的使用者应当使用这种模式。在客户机允许重复消息的情况下,利用这种模式可以获取一些效能改善,因为会话在避免重复消息时的开销较小。
2. 用消息选择器库
消息选择器可以在消息上设置为用户定义的属性。在发送或发布方,我们可以通过利用名值对的设置属性方法来设置属性名和它的值。为了设置名为“testProperty”、值为100 以及数据类型为整数的属性,我们可以在对象消息上如下设置属性:messaget.setIntProperty(“testProperty”, 100) ;设置属性方法用到两个自变量。第一个自变量是类型字符串,也就是属性值的名。第二个自变量是属性值。我们应当根据希望设置值的数据类型选择利用合适的设置属性方法(setIntProperty 用于整数值,setStringProperty 用于字符串类型值等)。在消息使用者方,我们应当使用具有合适选择标准的消息选择器字符串。选择标准是在
创建消息使用者的时候指定的。
我们使用的选择标准是选择属性名为“testProperty”和值为100 的消息发送。我们可以
用如下方法达到此目的:
String selector = “testProperty = 100 “ ;queueReceiver = session.createReceiver(queueName, selector).用选择器创建的消息使用者获取属性名为“testProperty”且值为100 的消息。
一旦创建与消息使用者相关联的选择器,JMS 规范就不允许它改变。如果您需要不同标准的消息接收器的话,那么您可能需要创建另外的消息接收器。一旦用消息选择器创建了消息接收器,您就可以利用消息使用者上的getMessageSelector()方法来检查选择器值。