原文地址
http://activemq.apache.org/redelivery-policy
重新投递机制
何时将消息重新投递到客户端的详细信息,请参考消息重新投递和死信队列处理的章节。你可以在你的 ActiveMQConnectionFactory或者ActiveMQConnection上配置RedeliveryPolicy 完全可以自定义实现你想重新投递的工作方式
可用属性
属性 | 默认值 | 描述 |
---|---|---|
backOffMultiplier | 5 | 回退乘数 |
collisionAvoidanceFactor | 0.15 | 如果启用,避免冲突的百分比范围 |
initialRedeliveryDelay | 1000L | 重新投递的毫秒数初始值 |
maximumRedeliveries | 6 | 设置在消息被视为有毒消息(poisoned pill)并且返回给broker之前消息最大重试次数,达到最大次数后将进入死信队列。设置为-1表示无限重试 |
maximumRedeliveryDelay | -1 | 如果useExponentialBackOff选项被设置,设置的这个最大重试延迟数将起作用(如果设置为-1表示不使用)(v5.5) |
redeliveryDelay | 1000L | 重新投递的延迟,如果 initialRedeliveryDelay = 0时起作用 (v5.4) |
useCollisionAvoidance | false | 重试机制应该使用冲突避免 |
useExponentialBackOff | false | 应该使用指数的回退( exponential back-off ), 即已指数的形式增加超时 |
每个目的地的重试机制
从ActiveMq5.7开始,你可以针对每个目的地设置设置重试机制( RedeliveryPolicy),ActiveMQConnection factory class现在提供了RedeliveryPolicyMap属性 允许使用命名的目的地或者目的地通配符来分配重试机制( RedeliveryPolicy)。
下面的代码片段展示了如何给队列和主题分配一个不同的重试策略( RedeliveryPolicy)
ActiveMQConnection connection ... // Create a connection
RedeliveryPolicy queuePolicy = new RedeliveryPolicy();
queuePolicy.setInitialRedeliveryDelay(0);
queuePolicy.setRedeliveryDelay(1000);
queuePolicy.setUseExponentialBackOff(false);
queuePolicy.setMaximumRedeliveries(2);
RedeliveryPolicy topicPolicy = new RedeliveryPolicy();
topicPolicy.setInitialRedeliveryDelay(0);
topicPolicy.setRedeliveryDelay(1000);
topicPolicy.setUseExponentialBackOff(false);
topicPolicy.setMaximumRedeliveries(3);
// Receive a message with the JMS API
RedeliveryPolicyMap map = connection.getRedeliveryPolicyMap();
map.put(new ActiveMQTopic(">"), topicPolicy);
map.put(new ActiveMQQueue(">"), queuePolicy);