ActiveMQ Artemis 如何控制组播队列名称?
ActiveMQ Artemis How to control the multicast queue name?
当消费者订阅一个主题时,系统会自动创建一个多播队列,并使用系统生成的名称。我想知道是否可以控制此名称的生成以使其更友好(例如 consumer_id + session_id + idx)。
我是用web控制台来监控的,以前的ActiveMQ版本(Artemis之前)我可以看到每次订阅一个主题的消费者名称,非常方便。
我以前在 ActiveMQ 5.0 的 Web 控制台中看到的内容:
我现在在 Artemis 控制台中看到的内容:
这些 UUID 命名队列是临时订阅,一旦客户端断开连接就会被删除。
以 clientId.subscriptionName
形式命名持久订阅的经典方法是在您的客户端上设置 clientId 和 subscriptionName 属性。请注意,当订阅者断开连接时,持久订阅也将继续接收消息。
对于 Artemis,您还可以使用 fully qualified queue names (FQQN) 功能来实现相同的目的,但额外的好处是可以完全控制持久订阅名称:
首先,像这样创建一个多播地址:
<address name="example.foo">
<multicast>
<queue name="q1"></queue>
<queue name="q2"></queue>
</multicast>
</address>
此时,您可以将消息发送到 example.foo
主题并从 example.foo::q1
和 example.foo::q2
队列中使用它们(注意 ::
分隔符)。
在我看来,您没有在 ActiveMQ Artemis Web 控制台中查找消费者信息的正确位置。当前,您正在查看显示“主要”组件(如接受器、地址、队列等)的主导航树。消费者不会按设计出现在这里。您的 ActiveMQ Artemis Web 控制台屏幕截图仅显示地址上的多播队列。在 JMS 主题用例中,每个订阅者都有自己的队列,通常称为“订阅队列”。但是,订阅队列与消费者不同。消费者从 订阅队列中消费 。如果要查看相应的消费者,则需要打开“消费者”选项卡。
例如,这是 3 个非持久 JMS 订户连接到名为 myTopic
:
的 JMS 主题时的屏幕截图
正如您所注意到的,订阅队列的名称并不能真正告诉您太多信息。但是,如果您单击“消费者”选项卡,您将看到大量信息,例如:
从“消费者”选项卡中,您可以看到消费者从何处连接、他们使用的队列和地址、他们的创建时间、他们的客户端 ID 等。如果有很多消费者,您可以过滤他们例如,基于他们使用的地址或队列。
请务必注意,ActiveMQ Artemis 而非 代表每个具有底层 JMX MBean 的消费者。这就是 ActiveMQ 5.x 所做的,这可能会导致大量消费者的资源利用问题,因为 MBean 是相当“重”的对象。
注意:这些屏幕截图是使用最新版本(即 2.16.0)截取的,其中包含比您在屏幕截图。
当消费者订阅一个主题时,系统会自动创建一个多播队列,并使用系统生成的名称。我想知道是否可以控制此名称的生成以使其更友好(例如 consumer_id + session_id + idx)。
我是用web控制台来监控的,以前的ActiveMQ版本(Artemis之前)我可以看到每次订阅一个主题的消费者名称,非常方便。
我以前在 ActiveMQ 5.0 的 Web 控制台中看到的内容:
我现在在 Artemis 控制台中看到的内容:
这些 UUID 命名队列是临时订阅,一旦客户端断开连接就会被删除。
以 clientId.subscriptionName
形式命名持久订阅的经典方法是在您的客户端上设置 clientId 和 subscriptionName 属性。请注意,当订阅者断开连接时,持久订阅也将继续接收消息。
对于 Artemis,您还可以使用 fully qualified queue names (FQQN) 功能来实现相同的目的,但额外的好处是可以完全控制持久订阅名称:
首先,像这样创建一个多播地址:
<address name="example.foo">
<multicast>
<queue name="q1"></queue>
<queue name="q2"></queue>
</multicast>
</address>
此时,您可以将消息发送到 example.foo
主题并从 example.foo::q1
和 example.foo::q2
队列中使用它们(注意 ::
分隔符)。
在我看来,您没有在 ActiveMQ Artemis Web 控制台中查找消费者信息的正确位置。当前,您正在查看显示“主要”组件(如接受器、地址、队列等)的主导航树。消费者不会按设计出现在这里。您的 ActiveMQ Artemis Web 控制台屏幕截图仅显示地址上的多播队列。在 JMS 主题用例中,每个订阅者都有自己的队列,通常称为“订阅队列”。但是,订阅队列与消费者不同。消费者从 订阅队列中消费 。如果要查看相应的消费者,则需要打开“消费者”选项卡。
例如,这是 3 个非持久 JMS 订户连接到名为 myTopic
:
正如您所注意到的,订阅队列的名称并不能真正告诉您太多信息。但是,如果您单击“消费者”选项卡,您将看到大量信息,例如:
从“消费者”选项卡中,您可以看到消费者从何处连接、他们使用的队列和地址、他们的创建时间、他们的客户端 ID 等。如果有很多消费者,您可以过滤他们例如,基于他们使用的地址或队列。
请务必注意,ActiveMQ Artemis 而非 代表每个具有底层 JMX MBean 的消费者。这就是 ActiveMQ 5.x 所做的,这可能会导致大量消费者的资源利用问题,因为 MBean 是相当“重”的对象。
注意:这些屏幕截图是使用最新版本(即 2.16.0)截取的,其中包含比您在屏幕截图。