1

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

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

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

有没有办法在消息进入队列时立即获得警报并确保在其他消费者实际消费消息之前浏览消息?

4

2 回答 2

2

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

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

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

更新

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

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

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

于 2013-08-07T09:34:55.847 回答
1

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

请查看链接中给出的示例。

于 2013-08-07T13:53:41.157 回答