2017-02-16 62 views
0

我有一個在cloudfoundry上運行多個實例的spring應用程序。 這些實例共享一個數據庫。他們有配置像這樣一個RabbitListener:如果需要的物品從某個源重新導入RabbitMQ/Spring:如果目前的獨家消費者註冊,另一位獨家消費者會註冊嗎?

@RabbitListener(queues = "${items.updated.queue}", exclusive = true) 

隊列獲得消息。

我只希望一個實例執行導入。根據我的理解,這可以通過專有標誌來實現。

現在,如果當前的exclusive consumer崩潰會發生什麼? 另一個當前正在運行的實例將自己註冊爲新的exclusive consumer?或者只有在應用程序啓動時才進行註冊?

回答

0

是的,另一位消費者將被授予訪問權限。

消費者將重新嘗試每消耗recoveryInterval毫秒(默認5000-5秒)。

您可以通過在偵聽器容器中設置間隔或recoveryBackoff來更改此設置。

請注意,您將從容器獲取關於失敗的WARN日誌以及來自連接工廠的信息日誌,該信息由於失敗而關閉。

您可以調整日誌級別以減少這些日誌,也可以將自定義ConditionalExceptionLogger注入容器和工廠。

請參閱the documentation

如果消費者失敗,因爲如果一個消費者的隊列被獨佔使用(默認情況下),並且發佈該事件,則會發出WARN日誌。要更改此日誌記錄行爲,請在SimpleMessageListenerContainerexclusiveConsumerExceptionLogger屬性中提供自定義ConditionalExceptionLogger。另請參閱「記錄通道關閉事件」一節。