问题描述
我已经如下配置ActiveMQ重新交付插件(最多4次重新交付)
<redeliveryPlugin fallbackToDeadLetter="true" sendToDlqIfMaxRetriesExceeded="true">
<redeliveryPolicyMap>
<redeliveryPolicyMap>
<defaultEntry>
<redeliveryPolicy initialRedeliveryDelay="5000" maximumRedeliveries="4" redeliveryDelay="10000"/>
</defaultEntry>
</redeliveryPolicyMap>
</redeliveryPolicyMap>
</redeliveryPlugin>
如果客户端无法发送ACK,则重新发送消息。到目前为止,一切都很好。但是,经纪人完全忽略了max reeliveries,并且多次“无限”地不断传递消息。而且消息永远不会移到DLQ。
我也尝试使用:
?jms.redeliveryPolicy.maximumRedeliveries=4
在连接URI(STOMP连接器)上,但也没有运气。
我们非常感谢您的帮助!
解决方法
对于STOMP客户端,我假设代理不会将消息视为已传递,除非客户端对消息进行了确认或否定,否则它必须假定从未将其发送给客户端,因此将其视为始终具有交货计数为零。经纪人重新交付插件会取消邮件的发送计数,因此,如果将邮件视为未送达,则在这种情况下很可能对邮件不采取任何措施。