ActiveMQ

时间:2016-04-01 16:17:25

标签: activemq

我使用ActiveMQ作为消息代理设置了一个简单的聊天应用程序。聊天是双方可以发布消息并且双方都订阅消息的主题。消息包含有关消息的一些元数据,如发送方和接收方ID。一切正常。

现在,我想找到所有等待聊天消息的用户,即他们处于离线状态,并且有一条已发布的消息,主题等待阅读。这些用户应该使用另一个平台接收有关要阅读新消息的通知(到他们的手机)。

已搜索所有ActiveMQ文档和论坛以获得答案,但找不到任何内容(可能无法理解)。对于MQ来说,这似乎是一个明显的查询...

我为代理启用了JMX并找到了EnqueueCount / DequeueCount,但这并没有多大帮助,因为它们计算了发送的消息总数(对于每个用户)。

2 个答案:

答案 0 :(得分:2)

查看持久订阅。这将为每个用户创建一个订阅,其中代理跟踪哪个消费者已收到哪些消息并支持"离开一段时间"问题

额外信用:改为使用虚拟主题。它发布到主题 - >从队列语义订阅。更灵活,更易于维护。

注意:编辑配置示例

<broker...>
 .... <!-- be sure to place elements after "<broker>" in alphabetical order -->
 <destinationInterceptors>
      <virtualDestinationInterceptor>
          <virtualDestinations>
             <virtualTopic name=">" prefix="VirtualTopicConsumers.*." selectorAware="false"/>
         </virtualDestinations>
     </virtualDestinationInterceptor>
 </destinationInterceptors>
 ...
</broker>

然后将您的制作人设置为:

  1. 制片人目的地:topic://My.Topic
  2. 订阅1目的地名称:queue:// VirtualTopicConsumers.Sub1.My.Topic
  3. 订阅1目的地名称:queue:// VirtualTopicConsumers.Sub2.My.Topic

答案 1 :(得分:1)

您可以采取哪些措施来查找已发布的消息以及已消费(而未消费)的消息,您可以聆听advisory messages

来自您的&#34; management-app&#34;订阅ActiveMQ.Advisory.MessageDelivered.Topic以了解已发送的消息。

然后订阅ActiveMQ.Advisory.MessageConsumed.Topic以找出已消费的消息。

然后你可能会做一些工作,弄清楚是否有消息在一个时间范围内没有消耗,需要采取一些行动(通过其他方式通知用户)。

您需要在配置中启用此功能。

<destinationPolicy>
   <policyMap><policyEntries> 
      <policyEntry topic=">" advisoryForConsumed="true" />
   </policyEntries></policyMap>
</destinationPolicy>