消息消费后,ActiveMQ Artemis 中的消息重复仍然被拒绝

Message duplicate in ActiveMQ Artemis is still rejected after the message is consumed

我正在使用 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 的未使用邮件时才拒绝邮件?

您看到的行为是正常的。重复检测 ID 对于每条消息都应该是唯一的。如果您对多个消息使用相同的 ID,那么如果它没有被代理上的重复 ID 缓存驱逐,则可能会被拒绝。根据缓存的大小将 ID 从缓存中逐出。一旦缓存达到其配置的大小,它将在添加新 ID 时开始删除最旧的 ID。