容器和 Broker 命名佇列
雖然最好使用 AnonymousQueue
實例作為自動刪除佇列,但從 2.1 版本開始,您可以將 Broker 命名佇列與監聽器容器一起使用。以下範例說明如何執行此操作
@Bean
public Queue queue() {
return new Queue("", false, true, true);
}
@Bean
public SimpleMessageListenerContainer container() {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(cf());
container.setQueues(queue());
container.setMessageListener(m -> {
...
});
container.setMissingQueuesFatal(false);
return container;
}
請注意名稱的空 String
。當 RabbitAdmin
宣告佇列時,它會使用 Broker 傳回的名稱更新 Queue.actualName
屬性。您必須在設定容器時使用 setQueues()
才能使其運作,以便容器可以在執行時存取宣告的名稱。僅設定名稱是不夠的。
您無法在容器執行時將 Broker 命名佇列新增至容器。 |
當連線重設並建立新的連線時,新的佇列會取得新的名稱。由於容器重新啟動和佇列重新宣告之間存在競爭條件,因此將容器的 missingQueuesFatal 屬性設定為 false 很重要,因為容器很可能最初會嘗試重新連線到舊的佇列。 |