AMQP 忽略 ActiveMQ 5 重新传递策略
ActiveMQ 5 redelivery policies ignored with AMQP
我有一个 Spring 启动应用程序,它使用 Qpid JMS 与 ActiveMQ 5.15.14 代理对话 AMQP。即使配置了重新交付插件,代理的重新交付策略也会被忽略。然而,客户端 (Qpid) 的重新传递策略确实起作用了。
当将完全相同的代码和客户端配置连接到 ActiveMQ Artemis 代理时,代理的重新传送策略就会启动,这正是我正在寻找的。
您是否知道可以解释 ActiveMQ 5 和 ActiveMQ Artemis 之间的这种不同行为?除了重新交付策略之外,这两个代理都使用了相当多的 OOTB 配置,并且在我的 ActiveMQ 5 代理中也启用了 schedulerSupport。这是 activemq.xml
:
中重新传送配置的样子
<redeliveryPlugin fallbackToDeadLetter="true" sendToDlqIfMaxRetriesExceeded="true">
<redeliveryPolicyMap>
<redeliveryPolicyMap>
<defaultEntry>
<redeliveryPolicy initialRedeliveryDelay="5000" maximumRedeliveries="9" redeliveryDelay="60000" />
</defaultEntry>
</redeliveryPolicyMap>
</redeliveryPolicyMap>
</redeliveryPlugin>
还有一件事需要考虑:当我使用 Openwire (JMS) 而不是 AMQP 时,将应用 ActiveMQ 5 代理的重新传送策略。
ActiveMQ 5.x 中的 AMQP 协议头比 Artemis 代理实现的协议头要原始得多,并且可能不会对从 AMQP 客户端发回的配置做出正确的反应。此外,5.x 代理可以根据代理上 'transportConnector' 中的转换器设置做出不同的反应,该转换器可以是 JMS、NATIVE[ 之一=20=] 或 RAW。 JMS 转换器将提供与 ActiveMQ 最兼容的行为,但需要在内部完全转换为 OpenWire 消息,然后在从 AMQP 发送方到 AMQP 接收方时返回到 AMQP,这会显着损害性能。 NATIVE 转换将尝试保留对消息重新传送状态的一些洞察力,但最有可能捕捉不到所有情况。使用 RAW 模式,根本无法了解消息传递计数,因此您绝对不会在代理端进行任何重新传递处理。
简而言之,如果您正在寻找功能齐全的 AMQP 代理,那么请选择 Artemis,因为它已经做了很多工作,如果您只需要可以让消息流动的东西,那么 5.x 应该可以,但不要'期待同样的服务质量。
我有一个 Spring 启动应用程序,它使用 Qpid JMS 与 ActiveMQ 5.15.14 代理对话 AMQP。即使配置了重新交付插件,代理的重新交付策略也会被忽略。然而,客户端 (Qpid) 的重新传递策略确实起作用了。
当将完全相同的代码和客户端配置连接到 ActiveMQ Artemis 代理时,代理的重新传送策略就会启动,这正是我正在寻找的。
您是否知道可以解释 ActiveMQ 5 和 ActiveMQ Artemis 之间的这种不同行为?除了重新交付策略之外,这两个代理都使用了相当多的 OOTB 配置,并且在我的 ActiveMQ 5 代理中也启用了 schedulerSupport。这是 activemq.xml
:
<redeliveryPlugin fallbackToDeadLetter="true" sendToDlqIfMaxRetriesExceeded="true">
<redeliveryPolicyMap>
<redeliveryPolicyMap>
<defaultEntry>
<redeliveryPolicy initialRedeliveryDelay="5000" maximumRedeliveries="9" redeliveryDelay="60000" />
</defaultEntry>
</redeliveryPolicyMap>
</redeliveryPolicyMap>
</redeliveryPlugin>
还有一件事需要考虑:当我使用 Openwire (JMS) 而不是 AMQP 时,将应用 ActiveMQ 5 代理的重新传送策略。
ActiveMQ 5.x 中的 AMQP 协议头比 Artemis 代理实现的协议头要原始得多,并且可能不会对从 AMQP 客户端发回的配置做出正确的反应。此外,5.x 代理可以根据代理上 'transportConnector' 中的转换器设置做出不同的反应,该转换器可以是 JMS、NATIVE[ 之一=20=] 或 RAW。 JMS 转换器将提供与 ActiveMQ 最兼容的行为,但需要在内部完全转换为 OpenWire 消息,然后在从 AMQP 发送方到 AMQP 接收方时返回到 AMQP,这会显着损害性能。 NATIVE 转换将尝试保留对消息重新传送状态的一些洞察力,但最有可能捕捉不到所有情况。使用 RAW 模式,根本无法了解消息传递计数,因此您绝对不会在代理端进行任何重新传递处理。
简而言之,如果您正在寻找功能齐全的 AMQP 代理,那么请选择 Artemis,因为它已经做了很多工作,如果您只需要可以让消息流动的东西,那么 5.x 应该可以,但不要'期待同样的服务质量。