我正在使用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 值的消息,新消息也会被拒绝。即使队列中没有具有相同哈希值的其他消息。
有没有办法将重复检测设置为仅在队列中存在具有相同HDR_DUPLICATE_DETECTION_ID的非消费邮件时才拒绝邮件?
您看到的行为是预期的。每条消息的重复检测 ID 应该是唯一的。如果对多个消息使用相同的 ID,则在代理上尚未逐出重复 ID 缓存时,可能会被拒绝。ID 根据缓存的大小从缓存中逐出。一旦缓存达到其配置的大小,它将在添加新 ID 时开始删除最旧的 ID。