gpt4 book ai didi

java - ActiveMQ 所有连接的默认 RedeliveryPolicy.maximumRedeliveries 配置

转载 作者:太空宇宙 更新时间:2023-11-04 12:09:45 24 4
gpt4 key购买 nike

我正在寻找在定义的重试次数后将所有消息发送到死信队列的正确方法。

由于 redeliveryPlugin 仅适用于本地存储,因此破坏了我们基于 JDBC 的 HA 配置,因此我们决定将所有消息运行到 DLQ 中。

individualDeadLetterStrategy 目标配置在这里派上用场:

    <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) 或代码中设置最大重试次数,我可以很好地配置系统。

但是,我想为所有连接配置默认的 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。

您的日志中肯定有一些类似这样的内容光标重复发送...重复消息添加尝试被拒绝。目的地...

关于java - ActiveMQ 所有连接的默认 RedeliveryPolicy.maximumRedeliveries 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39961895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com