2016-08-29 41 views
0

我們有這種設置,我們調用webservice來創建隊列,並從響應接收隊列名稱。Spring amqp:檢測到關機並重新連接到另一個隊列

然後我們設置一個SimpleMessageListenerContainer並在那裏設置隊列名稱,然後啓動它。

但是,時不時,隊列被刪除 - 導致「404無法聲明隊列XXXXXXXXX」錯誤。在這些情況下,我需要再次調用Web服務,並將新的QueueName添加到SimpleMessageListenerContainer,然後刪除舊的。

我想通過處理這個問題的唯一方法是創建一個自定義的CachedConnectionFactory並覆蓋shutdownCompleted方法。

但是,當SimpleMessageListenerContainer切換時,shutdownCompleted似乎也會觸發,因此它會循環。發送到shutdownCompleted的ShutdownSignalException似乎沒有任何區別,如果觸發器是從服務器或處理新隊列的客戶端的外部,所以我無法弄清楚如何跳過「秒」的處理。

那麼當服務器殺死隊列時,檢測和運行自定義處理的常用方法是什麼?

回答

0

容器在偵聽器失敗時發佈ListenerContainerConsumerFailedEvent

添加一個ApplicationListener<ListenerContainerConsumerFailedEvent>,停止容器,更改隊列並重新啓動。

您可能會得到多個事件,因爲默認情況下,容器會嘗試在放棄和停止自身之前重新連接3次。