重传策略
重传策略
关于何时将消息重新传递到客户端的详细信息,请参阅 消息重传和 DLQ 处理 部分。您可以配置 RedeliveryPolicy 在您的 ActiveMQConnectionFactory 或 ActiveMQConnection 上,以自定义重传的具体方式。
您可以使用 Java 代码、Spring 或 连接配置 URI 来自定义此项。
可用属性
属性 | 默认值 | 描述 |
---|---|---|
backOffMultiplier |
5 |
回退倍增器。 |
collisionAvoidanceFactor |
0.15 |
如果启用,则为碰撞避免范围的百分比。 |
initialRedeliveryDelay |
1000L |
初始重传延迟(以毫秒为单位)。 |
maximumRedeliveries |
6 |
设置消息重传的最大次数,超过该次数将被视为 **中毒药丸** 并返回到代理,以便将其发送到死信队列。设置为 -1 表示无限次重传。 |
maximumRedeliveryDelay |
-1 |
设置如果 useExponentialBackOff 选项已设置,将应用的最大传递延迟。(使用值 -1 来定义不应用最大值)(v5.5)。 |
redeliveryDelay |
1000L |
如果 initialRedeliveryDelay=0 时的传递延迟(v5.4)。 |
useCollisionAvoidance |
false |
重传策略是否应使用碰撞避免。 |
useExponentialBackOff |
false |
是否应使用指数回退,即以指数方式增加超时时间。 |
每个目的地的重传策略
从 ActiveMQ Classic v5.7.0 开始,您现在可以在每个目的地基础上配置 RedeliveryPolicy。 ActiveMQConnection
工厂类现在公开 RedeliveryPolicyMap 属性,该属性允许使用命名目的地或目的地通配符来分配重传策略。下面的代码片段展示了如何为主题和队列配置不同的 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);