JMS - 在消费者使用消息之前浏览队列消息

时间:2013-08-07 09:00:05

标签: java jms activemq apache-camel message-queue

我必须在消费者使用之前浏览消息队列中的消息。 (使用activemq作为经纪人)

有些消费者正在等待队列中的消息。

我必须浏览消息并使用该消息信息我必须执行一些工作,但问题是消息一进入队列即被消耗。

一旦消息进入队列,是否有任何方法可以获得警报,并确保在消息被其他消费者实际消费之前浏览消息?

2 个答案:

答案 0 :(得分:3)

您可以使用消息选择器创建队列浏览器

this.queueBrowser = getQueueSession().createBrowser(getQueue(),
        selector);

选择器就像是用于选择消息的“where子句”。

<强>更新

如果一个队列带有“普通”消费者,并且您希望在之前浏览队列,则真正的消费者会消费该消息。如果真正的消费者首先消费,您的浏览器将看不到该消息。那是不可靠

因此,您应该使用两个队列。您的浏览应用程序充当“中间人”或类似网桥,它将始终将所有消息发布到第一个队列,并且必须在第二个队列上发送它。真正的消费者正在连接到第二个队列。所以两者都正常消耗。

另一种可能性是更改发件人:它可以在两个队列上发送消息 ,一个用于真正的消费者,一个用于您的浏览应用程序。

答案 1 :(得分:1)

我已阅读有关ActiveMQ的composite destinations。使用复合目标,您可以将消息路由到多个目标。您可以在虚拟目标中组合队列和主题。 ActiveMQ将根据<forwardTo>属性中定义的值路由消息。因此,对于您尝试实现的模式,普通使用者将从一个队列接收消息,并从另一个主题接收浏览器。这样两者都将获得相同的消息数据。

请查看link中提供的示例。