我使用ActiveMQ作为消息代理设置了一个简单的聊天应用程序。聊天是双方可以发布消息并且双方都订阅消息的主题。消息包含有关消息的一些元数据,如发送方和接收方ID。一切正常。
现在,我想找到所有等待聊天消息的用户,即他们处于离线状态,并且有一条已发布的消息,主题等待阅读。这些用户应该使用另一个平台接收有关要阅读新消息的通知(到他们的手机)。
已搜索所有ActiveMQ文档和论坛以获得答案,但找不到任何内容(可能无法理解)。对于MQ来说,这似乎是一个明显的查询...
我为代理启用了JMX并找到了EnqueueCount / DequeueCount,但这并没有多大帮助,因为它们计算了发送的消息总数(对于每个用户)。
答案 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 :(得分: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>