我使用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
对象配置的特定的基于客户端的再交付特性。
JmsRedeliveryPolicy
),您显然必须实现它来配置重新交付。请看这个例子。一旦您的策略实现,只需调用setRedeliveryPolicy()
在您的JmsConnectionFactory
。
这里要记住的要点是,这两个实现是100%独立的,因此您可以在一个上配置的内容不一定在另一个上可用。目前activemq5。xRedeliveryPolicy
比QpidJmsRedeliveryPolicy
有更多的选项。
请记住,在许多(如果不是大多数)情况下,复杂的重传递语义可以在代理上配置,所以如果有您想要的配置元素在Qpid的JmsRedeliveryPolicy
上不可用,我建议您查看您正在使用的代理,因为您可能会在那里找到等效的选项。
AMQP JMS客户机不支持与Openwire JMS客户机相同的配置选项。这样做的主要原因是,与Openwire客户端不同,重新交付不会在AMQP JMS客户端本地发生,而是将消息释放回代理以进行重新分发。这意味着任何延迟处理或其他机制都需要在代理端完成,而不是在客户端。
当前客户端中唯一的选项是基于AMQP交付计数应用的最大重新交付选项,该计数作为消息传输的一部分被跟踪。