重新傳遞政策
重新傳遞政策
關於訊息何時重新傳遞給客戶端的詳細資訊,請參閱訊息重新傳遞和 DLQ 處理章節。您可以在您的ActiveMQConnectionFactory或ActiveMQConnection上設定RedeliveryPolicy,以自訂您希望重新傳遞運作的方式。
您可以使用 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。下面的程式碼片段顯示了如何為主題和佇列設定不同的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);