java - ActiveMQ Artemis 中的消息重复在消息被消费后仍然被拒绝

标签 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 的未消费消息时才拒绝消息?

最佳答案

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

关于java - ActiveMQ Artemis 中的消息重复在消息被消费后仍然被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59002142/

相关文章:

spring-jms - 如何解决 "WARN: AMQ212054: Destination address=examp is blocked"

java - Artemis-2.6.3 控制台 : Service Unavailable

stomp - ApacheMQ Artemis 保留没有路由的消息

jms - 如何在 Wildfly 和 ApacheActiveMQ Artemis 之间创建 jms 桥?

jms - 如何将 WildFly 连接到远程 Artemis 服务器

java - SingleTon 类从类外部调用时创建多个对象

java - 无法让我的 while 语句正常工作

用于数学的 Java 或 Python?

java - 通过 AlertDialog 关闭并稍后重新打开时 Activity 崩溃

java - 如何在 Java 中对用户输入进行四舍五入