设置JMS 2.0使用者的clientID

时间:2019-11-03 10:31:23

标签: java jms

在JMS 1.x中,创建持久订阅时,使用clientId唯一标识客户端。此answer解释了JMS 1.x

中clientId的用法。

使用JMS 2.x时,clientId被设置为可选。我想了解在JMS 2.x中提供clientId的利弊。

来自Oracle article on JMS 2.x features

  

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

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

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

1 个答案:

答案 0 :(得分:0)

JMS 2规范指出了为什么在6.1.3节中存在客户端ID:

  

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

关于共享的非持久订阅,规范在第8.3.3节中对此进行了说明:

  

共享的非持久订阅由以下名称指定:   客户和客户标识符(如果已设置)。如果设置客户端标识符的时间   首先创建共享的非持久订阅,然后创建一个客户端   随后希望在共享的非持久对象上创建消费者   订阅必须使用相同的客户端标识符。

该规范在第8.3.4节中说明了有关共享持久订阅的基本知识:

  

共享的持久订阅由客户端指定的名称标识   以及客户标识符(如果已设置)。如果在设置客户端标识符时   首先创建共享持久订阅,然后创建一个客户端   随后希望在共享的持久性上创建消费者   订阅必须使用相同的客户端标识符。

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