[英]AmazonMQ/ActiveMQ Message RedeliveryPolicy MaximumRedeliveries Ignored
[英]ActiveMQ Configuration of default RedeliveryPolicy.maximumRedeliveries for all connections
我正在寻找在定义的重试次数后将所有消息发送到死信队列的正确方法。
由于 redeliveryPlugin 仅适用于本地存储,因此破坏了我们基于 JDBC 的 HA 配置,因此我们决定将所有消息运行到 DLQ 中。
individualDeadLetterStrategy
DeadLetterStrategy 目标配置在这里派上用场:
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry topic=">" >
<deadLetterStrategy>
<individualDeadLetterStrategy
queuePrefix="DLQ."
useQueueForQueueMessages="true" />
</deadLetterStrategy>
</policyEntry>
<policyEntry queue=">" >
<deadLetterStrategy>
<individualDeadLetterStrategy
queuePrefix="DLQ."
useQueueForQueueMessages="true" />
</deadLetterStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
使用此选项并在连接 URI ( jms.redeliveryPolicy.maximumRedeliveries=4
) 或代码中设置 maximumRetries,我可以很好地配置系统。
然而,我想为所有连接配置默认的redeliveryPolicy
设置,以对代理中的所有应用程序实施标准。 个别应用程序设置可能会有所不同,但正如我目前所见,我无法在 XML 中配置默认值 - 或者有什么方法?
我试图用 redeliveryplugin 做到这一点,但我的问题是,这似乎只适用于特定队列,而不适用于所有队列。 我无法使用插件更改默认的 RedeliveryPolicy,也无法删除延迟(最少 1000):
<plugins>
<redeliveryPlugin fallbackToDeadLetter="true" sendToDlqIfMaxRetriesExceeded="true">
<redeliveryPolicyMap>
<redeliveryPolicyMap>
<defaultEntry>
<redeliveryPolicy maximumRedeliveries="0" initialRedeliveryDelay="1001" redeliveryDelay="1001" />
</defaultEntry>
</redeliveryPolicyMap>
</redeliveryPolicyMap>
</redeliveryPlugin>
</plugins>
你是对的,这个插件对于主题不能正常工作,因为在重新发送消息时启用了持久性的persistenceAdapter,它被认为是重复的并被丢弃。 没有持久性还有另一个问题,即消息可能已发送并标记为已交付给消费者,而没有。
您只能选择删除defaultEntry
并尝试只向队列添加一个,以将未传递的主题消息发送到 DLQ。
您的日志中肯定有一些类似此cursor got duplicate send...
Duplicate message add attempt rejected. Destination...
Duplicate message add attempt rejected. Destination...
这个问题的可能答案是: https : //developer.jboss.org/thread/252039
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.