AMQP忽略了ActiveMQ 5重新交付策略



我有一个Spring Boot应用程序,它使用Qpid JMS与ActiveMQ 5.15.14代理程序进行AMQP对话。即使配置了重新交付插件,代理的重新交付策略也会被忽略。然而,客户端(Qpid(的重新交付策略确实发挥了作用。

当完全相同的代码和客户端配置连接到ActiveMQ Artemis代理时,代理的重新交付策略开始生效,这正是我想要的。

您所知道的任何事情都可以解释ActiveMQ 5和ActiveMQ Artemis之间的这种不同行为?除了重新交付策略之外,这两个代理都使用了相当多的OOTB配置,并且在我的ActiveMQ 5代理中也启用了schedulerSupport。以下是activemq.xml:中的redlivey配置

<redeliveryPlugin fallbackToDeadLetter="true" sendToDlqIfMaxRetriesExceeded="true">
   <redeliveryPolicyMap>
      <redeliveryPolicyMap>
         <defaultEntry>
            <redeliveryPolicy initialRedeliveryDelay="5000" maximumRedeliveries="9" redeliveryDelay="60000" /> 
         </defaultEntry>
      </redeliveryPolicyMap>
   </redeliveryPolicyMap>
</redeliveryPlugin>

还有一件事需要考虑:当我使用Openwire(JMS(而不是AMQP时,将应用ActiveMQ5代理的重新交付策略。

ActiveMQ 5.x中的AMQP协议头远比Artemis broker实现的头更原始,并且可能对从AMQP客户端发回的处置反应不正确。此外,5.x代理可以根据代理上"transportConnect"中的转换器设置做出不同的反应,该转换器可以是JMSNATIVERAW之一。JMS转换器将提供最ActiveMQ兼容的行为,但需要在内部对OpenWire消息进行完整转换,然后在从AMQP发送器到AMQP接收器的过程中返回AMQP,这可能会严重影响性能。NATIVE转换将试图保留对消息重新传递状态的一些见解,但不会很可能抓住所有情况。使用RAW模式,根本无法了解消息传递计数,因此您肯定不会在代理端获得任何重新传递处理。

简而言之,如果你正在寻找一个功能齐全的AMQP代理,那么选择Artemis,因为它已经做了很多工作,如果你只需要一些可以让消息流动的东西,那么5.x应该可以工作,但不要期望相同的服务质量。

最新更新