2013-01-09 88 views
1

我正在使用activemq發送消息。由於發送的消息數量以及應用程序發送的其他工作量,我已啓用異步發送。ActiveMQ異步發送等待所有要發送的消息

當應用程序結束時,我想確保剩下的郵件實際上被傳送,因爲我們有時會錯過最後一次連接消息。

谷歌搜索我發現只有警告說,你可能會錯過一些消息,這是可以接受的,但我們錯過了大約40%的時間最後一些。我希望改善這種情況。

問:是否有任何方法檢查activemq生產者/發送者是否發送了所有異步消息?

ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(brokerUrl); 
    connectionFactory.setUseAsyncSend(true); 
    RedeliveryPolicy policy = connectionFactory.getRedeliveryPolicy(); 
    policy.setInitialRedeliveryDelay(500); 
    policy.setBackOffMultiplier((short)2); 
    policy.setUseExponentialBackOff(true); 
    policy.setMaximumRedeliveries(10); 

回答

1

您可以設置異步發送模式回到關閉的最後一條消息,這將導致客戶端的發送等到經紀人承認,已收到消息。連接對象需要轉換爲ActiveMQConnection,然後你可以調用setUseAsyncSend(false)

+0

這聽起來像一個很好的計劃。在我使用ActiveMQSession的情況下,我使用它略有不同。 '((ActiveMQSession)session).setAsyncDispatch(false); ((ActiveMQSession)會話).setSessionAsyncDispatch(false); ' – Djarshi