正在为JMS 2.0使用者设置客户端ID



使用JMS 1.x,在创建持久订阅时,clientId用于唯一标识客户端。这个答案解释了JMS 1.x 中客户端ID的使用

对于JMS 2.x,clientId是可选的。我想了解在JMS2.x中提供clientId的利弊。

来自Oracle关于JMS 2.x特性的文章:

共享持久订阅。这些仅在JMS 2.0中可用,并且是使用createSharedDurableConsumer创建的。他们可以有任何数量的消费者设置客户端标识符是可选的。订阅由订阅名称和客户端标识符的组合标识(如果已设置(。

听起来订阅名称现在是唯一的标识符,但为什么要有clientID?这些是会话类上的新方法,因此不能向后兼容。使用JMS 2.x设置clientId有什么好处或坏处?

MessageConsumer messageConsumer = session.createSharedDurableConsumer(topic, "myDurableSub");

JMS 2规范指出了第6.1.3节:中存在客户端ID的原因

JMS定义的客户端标识符的唯一用途是在标识非共享的持久订阅或其在中的可选用途标识共享的持久订阅或非持久订阅。

关于共享的非持久订阅,规范在第8.3.3节:中说明了这一点

共享的非持久订阅由客户端和客户端标识符(如果设置的话(。如果客户端标识符是在首先创建共享的非持久订阅,然后创建客户端随后希望在共享的非耐用产品上创建一个消费者订阅必须使用相同的客户端标识符。

规范在第8.3.4节中对共享持久订阅做了同样的基本说明:

共享持久订阅由客户端指定的名称标识以及如果设置了客户端标识符,则通过客户端标识符。如果客户端标识符是在首先创建了共享持久订阅,然后创建了一个客户端随后希望在共享耐用产品上创建一个消费者订阅必须使用相同的客户端标识符。

通过使客户端标识符对于共享的持久和非持久订阅是可选的,这使得共享订阅更加方便,因为每个客户端只需要提供订阅名称,而不需要同时提供客户端标识符和订阅名称。这符合JMS2的一般主题,即简化API以使JMS更方便使用。

相关内容

最新更新