【问题标题】:Setting clientID for JMS 2.0 consumer为 JMS 2.0 使用者设置 clientID
【发布时间】:2019-11-04 03:36:33
【问题描述】:

在 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");

【问题讨论】:

    标签: java jms


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-04-10
      • 2020-05-04
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 2014-02-22
      • 2014-10-02
      相关资源
      最近更新 更多