避免在JMS / ActiveMQ上重复消息


问题内容

有没有一种方法可以抑制ActiveMQ服务器上定义的队列上的重复消息?

我尝试手动定义JMSMessageID((message.setJMSMessageID(“
uniqueid”)),但是服务器忽略此修改并使用内置的JMSMessageID传递消息。

根据规范,我没有找到有关如何删除邮件重复数据的参考。

在HornetQ中,要解决此问题,我们需要在消息定义中声明HQ特定的属性org.hornetq.core.message.impl.HDR_DUPLICATE_DETECTION_ID。

即:

Message jmsMessage = session.createMessage();
String myUniqueID = "This is my unique id"; // Could use a UUID for this
message.setStringProperty(HDR_DUPLICATE_DETECTION_ID.toString(), myUniqueID);

有人知道ActiveMQ是否有类似的解决方案?


问题答案:

您应该看看Apache
Camel,它提供了一个与任何JMS提供程序一起使用的幂等消费者组件,请参阅:http : //camel.apache.org/idempotent-
consumer.html

结合使用ActiveMQ组件可以使使用JMS非常简单,请参见:http :
//camel.apache.org/activemq.html