コンテナーとブローカー名のキュー

AnonymousQueue インスタンスを自動削除キューとして使用することをお勧めしますが、バージョン 2.1 以降では、ブローカーの名前付きキューをリスナーコンテナーで使用できます。次の例は、その方法を示しています。

@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 がキューを宣言すると、ブローカーによって返された名前で Queue.actualName プロパティが更新されます。これが機能するようにコンテナーを構成するときは、setQueues() を使用して、コンテナーが実行時に宣言された名前にアクセスできるようにする必要があります。名前を設定するだけでは不十分です。

実行中のコンテナーにブローカー名のキューを追加することはできません。
接続がリセットされ、新しい接続が確立されると、新しいキューに新しい名前が付けられます。コンテナーの再起動とキューの再宣言の間には競合状態があるため、コンテナーの missingQueuesFatal プロパティを false に設定することが重要です。これは、コンテナーが最初に古いキューに再接続しようとする可能性が高いためです。