Activemq 中一个主题的多个侦听器如何工作?
Posted
技术标签:
【中文标题】Activemq 中一个主题的多个侦听器如何工作?【英文标题】:How multiple listeners for a Topic work in Activemq? 【发布时间】:2018-04-01 04:02:09 【问题描述】:我正在使用 ActiveMq 嵌入式代理。我正在使用发布/订阅模型。我有多个听众订阅了该主题。我正在使用默认消息侦听器容器。
所以我开始获取主题和订阅者的统计信息。
Topic 中的消息数统计始终为零。
DestinationStatistics statistics = destination
.getDestinationStatistics();
LOG.info("The message count in topic is" + destination.getMessages().count())
据我所见,“主题中的消息数”始终为零。 所以现在我得到了目的地消费者的统计数据。目的地是我正在使用的主题。
Iterator<Subscription> it = destination.getConsumers().iterator();
while(it.hasNext())
Subscription s= it.next();
LOG.info(s.getPendingQueueSize()+ ""+ s.getEnqueueCounter()+""+s.getDequeueCounter())
我看到每个消费者的这些统计信息反映了我作为 pub/sub 的一部分发送的消息。
那么整个过程是如何进行的呢?
我发布一条消息,broker 立即将消息推送给订阅者,订阅者维护各自消费者的消息。 因此,主题中的消息计数始终为零,并且每个消费者的统计信息都可以了解代理接收到的消息。
有人能解释一下这个过程以及统计数据应该如何工作吗?
【问题讨论】:
你的主题是自动确认的吗?如果是这样,那么它将立即将所有消息发送给消费者。如果您的主题是持久的并且您的消费者没有运行,那么您应该会看到有关该主题的消息。 【参考方案1】:主题只是一个地址。它不能保存消息,只能向订阅者发送消息。因此,它没有消息计数。
订阅者可以将消息保留一段时间,直到被消费者消费。
您可以使用 ActiveMQ Web 控制台或通过 JMX/Jolokia API 查看有关入队消息数量以及等待分派的消息数量的统计信息。
【讨论】:
以上是关于Activemq 中一个主题的多个侦听器如何工作?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用虚拟目的地创建多个 activemq 主题订阅者实例?