在AMQ队列中拒绝具有相同正文的消息的最佳方法是什么?

时间:2010-03-18 21:00:41

标签: jms activemq

我有一个AMQ队列,它接收带有字符串主体的简单消息。考虑我发送CLSID作为消息正文。 CLSID可能不是唯一的,但我想拒绝所有没有唯一主体的消息,并且只在队列中保留此类消息的单个实例。有没有简单的方法呢?

目前我正在使用解决方法。来自队列的消息由某些处理器使用,该处理器尝试将主体插入到应用于message_body字段的UNIQUE约束的简单DB表中。如果处理器成功插入消息 - 它被分配给exchange.out.body并发送到其他队列。如果抛出ConstraintViolationException - 则不会向其他队列重新发送任何内容。

我想知道AMQ是否支持开箱即用的类似内容?

1 个答案:

答案 0 :(得分:1)

我相信你可以为activemq编写一个拦截器,你可以在其上对消息执行某些操作。查看:http://activemq.apache.org/interceptors.html

话虽如此,我个人认为这是不好的做法。 ActiveMQ是一个消息传递系统,只能响应消息的传输。所有逻辑都可以使用您的应用程序执行(要么确保发送方不能发送相同的消息,然后一次OR,创建一个中间消费者,该消费者确实将收到的主体与包含已经看过的消息体的数据库匹配,将消息路由到实际的接收队列)