我必须在消费者使用之前浏览消息队列中的消息。 (使用activemq
作为经纪人)
有些消费者正在等待队列中的消息。
我必须浏览消息并使用该消息信息我必须执行一些工作,但问题是消息一进入队列即被消耗。
一旦消息进入队列,是否有任何方法可以获得警报,并确保在消息被其他消费者实际消费之前浏览消息?
答案 0 :(得分:3)
您可以使用消息选择器创建队列浏览器:
this.queueBrowser = getQueueSession().createBrowser(getQueue(),
selector);
选择器就像是用于选择消息的“where子句”。
<强>更新强>
如果一个队列带有“普通”消费者,并且您希望在之前浏览队列,则真正的消费者会消费该消息。如果真正的消费者首先消费,您的浏览器将看不到该消息。那是不可靠。
因此,您应该使用两个队列。您的浏览应用程序充当“中间人”或类似网桥,它将始终将所有消息发布到第一个队列,并且必须在第二个队列上发送它。真正的消费者正在连接到第二个队列。所以两者都正常消耗。
另一种可能性是更改发件人:它可以在两个队列上发送消息 ,一个用于真正的消费者,一个用于您的浏览应用程序。
答案 1 :(得分:1)
我已阅读有关ActiveMQ的composite destinations。使用复合目标,您可以将消息路由到多个目标。您可以在虚拟目标中组合队列和主题。 ActiveMQ将根据<forwardTo>
属性中定义的值路由消息。因此,对于您尝试实现的模式,普通使用者将从一个队列接收消息,并从另一个主题接收浏览器。这样两者都将获得相同的消息数据。
请查看link中提供的示例。