繁体   English   中英

为 JMS 2.0 使用者设置 clientID

[英]Setting clientID for JMS 2.0 consumer

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

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

来自关于 JMS 2.x 功能的 Oracle 文章

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

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

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

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

JMS 定义的客户端标识符的唯一用途是强制使用它来标识非共享的持久订阅,或者可选地使用它来标识共享的持久或非持久订阅。

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

共享的非持久订阅由客户端指定的名称和客户端标识符(如果设置)来标识。 如果在首次创建共享非持久订阅时设置了客户端标识符,则随后希望在该共享非持久订阅上创建消费者的客户端必须使用相同的客户端标识符。

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

共享持久订阅由客户端指定的名称和客户端标识符(如果已设置)标识。 如果在首次创建共享持久订阅时设置了客户端标识符,则随后希望在该共享持久订阅上创建消费者的客户端必须使用相同的客户端标识符。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM