ActiveMQ Artemis 的 TopicControl listAllSubscriptions 方法的新功能

New Functionality for TopicControl listAllSubscriptions Methods of ActiveMQ Artemis

在 ActiveMQ Artemis 1.5.6 中,可以通过 Jolokia 调用 TopicControllistAllSubscriptions 来获取主题的所有订阅,例如:

.../jolokia/exec/org.apache.activemq.artemis:type=Broker,brokerName="broker-name",module=JMS,serviceType=Topic,name="topic-name"/listAllSubscriptions()"

我正在尝试升级到 Artemis 2.x,但是界面已经不存在了。我现在如何通过 Jolokia 获得某个主题的所有订阅?

JMS 主题上的每个订阅在 ActiveMQ Artemis 中表示为相应地址上的队列。因此,您可以阅读与 JMS 主题相对应的 AddressControl 上的 QueueNames 属性。 Jolokia URL 会是这样的:

...jolokia/read/org.apache.activemq.artemis:broker="broker-name",component=addresses,address="topic-name"/QueueNames

非持久订阅将由名称为随机 ID 的队列表示。持久订阅将由一个队列表示,其名称包含创建订阅时通过 JMS API 提供的客户端 ID 和订阅名称。

如果您需要有关订阅的其他详细信息(例如,它包含的消息数量、filter/selector 它正在使用的内容等),那么您只需通过 Jolokia 查询队列即可获取该信息。

如您所见,ActiveMQ Artemis 1.x 和 2.x 之间的管理 API 发生了显着变化。这是因为我们希望将管理整合到核心代理的概念和资源,而不是它支持的任何特定 API 或协议。因此,删除了所有特定于 JMS 的管理资源。有关详细信息,请参阅 this commit

请记住,从 1.x 移动到 2.x 是“主要”版本升级,不能保证向后兼容。