AMQP返回策略



我使用Apache Camel AMQP组件与Azure服务总线。我想添加一个再投递策略,因为它可以为ActiveMQ:

private void addRedeliveryPolicy(ActiveMQConnectionFactory factory) {
RedeliveryPolicy policy = factory.getRedeliveryPolicy();
policy.setMaximumRedeliveries(5);
policy.setMaximumRedeliveryDelay(10000);
policy.setInitialRedeliveryDelay(10);
policy.setRedeliveryDelay(30);
}

在重发策略中存在AMQPComponent的情况下,存在单个getter:

private void addRedeliveryPolicy(JmsConnectionFactory factory) {
JmsRedeliveryPolicy defaultCallbackRedeliveryPolicy = factory.getRedeliveryPolicy();
factory.getRedeliveryPolicy().getMaxRedeliveries(...);
}

使用标准AMQP和Qpid库。问题-如何将AMQP组件的重交付特性设置为:redeliveryDalay, redeliveryAttempts ?

Camel的ActiveMQ组件使用ActiveMQ特有的OpenWire JMS客户端实现。它使用的是未标准化的OpenWire协议。它实现了通过RedeliveryPolicy对象配置的特定的基于客户端的再交付特性。

Camel的AMQP组件使用Qpid AMQP客户端,该客户端可以与任何AMQP代理、客户端、路由器等进行互操作,并且必须遵守AMQP规范。它有一个接口(即JmsRedeliveryPolicy),您显然必须实现它来配置重新交付。请看这个例子。一旦您的策略实现,只需调用setRedeliveryPolicy()在您的JmsConnectionFactory

这里要记住的要点是,这两个实现是100%独立的,因此您可以在一个上配置的内容不一定在另一个上可用。目前activemq5。xRedeliveryPolicy比QpidJmsRedeliveryPolicy有更多的选项。

请记住,在许多(如果不是大多数)情况下,复杂的重传递语义可以在代理上配置,所以如果有您想要的配置元素在Qpid的JmsRedeliveryPolicy上不可用,我建议您查看您正在使用的代理,因为您可能会在那里找到等效的选项。

AMQP JMS客户机不支持与Openwire JMS客户机相同的配置选项。这样做的主要原因是,与Openwire客户端不同,重新交付不会在AMQP JMS客户端本地发生,而是将消息释放回代理以进行重新分发。这意味着任何延迟处理或其他机制都需要在代理端完成,而不是在客户端。

当前客户端中唯一的选项是基于AMQP交付计数应用的最大重新交付选项,该计数作为消息传输的一部分被跟踪。

最新更新