使用完消息后,ActiveMQ Artemis中的消息重复仍然被拒绝

时间:2019-11-22 21:44:32

标签: java activemq-artemis

我正在使用ActiveMQ Artemis 2.10,在我的用例中,我想避免队列中有重复的消息,因此在将消息发送到队列之前,我设置了属性Message.HDR_DUPLICATE_DETECTION_ID:

ClientConsumer consumer = session.createConsumer(queueName);
ClientMessage message = consumer.receive();
message.putStringProperty(Message.HDR_DUPLICATE_DETECTION_ID, hashVal);

但是问题在于,即使我尝试发送另一条具有相同hashVal值的消息,在消耗掉此消息之后,也会拒绝新消息。即使队列中没有其他消息具有相同的hashVal值。

是否有一种方法可以将重复检测设置为仅当队列中存在具有相同HDR_DUPLICATE_DETECTION_ID的未消耗消息时才拒绝消息?

1 个答案:

答案 0 :(得分:1)

您所看到的行为是预期的。每个消息的重复检测ID应该是唯一的。如果您对多个消息使用相同的ID,则可能会拒绝该消息,如果该消息尚未被代理上的ID高速缓存清除。根据缓存的大小从缓存中逐出ID。一旦缓存达到其配置的大小,它将在添加新ID时开始删除最早的ID。