我正在寻找在定义的重试次数后将所有消息发送到死信队列的正确方法。
由于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
)或代码中设置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>
答案 0 :(得分:0)
你是对的,这个插件对于主题不能正常工作,因为在重新发送消息时,persistenceAdapter启用了持久性,它被视为重复并被丢弃。没有持久性存在另一个问题,即消息可能被发送并标记为传递给消费者而不是。
您只能选择删除FID ID Sire Dam Sex
1 1832 0 1073 1
1 1833 1201 1251 2
1 1834 15 560 1
1 1835 1598 1583 1
1 1836 0 13 1
1 1837 1107 562 1
1 1838 900 0 1
1 1839 900 571 2
1 1840 900 0 1
1 1841 0 415 1
1 1842 0 0 2
1 1843 1201 303 2
1 1844 0 0 1
1 1845 1107 557 2
1 1846 15 749 2
并尝试仅向队列中添加一个,以将未归化的主题消息发送到DLQ。
您的日志中肯定有一些类似defaultEntry
cursor got duplicate send...