コンテナー管理
アノテーション用に作成されたコンテナーは、アプリケーションコンテキストに登録されません。RabbitListenerEndpointRegistry
Bean で getListenerContainers()
を呼び出すことにより、すべてのコンテナーのコレクションを取得できます。次に、このコレクションを反復処理して、たとえば、すべてのコンテナーを停止または開始したり、レジストリ自体で Lifecycle
メソッドを呼び出したりして、各コンテナーで操作を呼び出すことができます。
getListenerContainer(String id)
を使用して id
を使用して、個々のコンテナーへの参照を取得することもできます。たとえば、上記のスニペットによって作成されたコンテナーの registry.getListenerContainer("multi")
です。
バージョン 1.5.2 以降、登録済みコンテナーの id
値を getListenerContainerIds()
で取得できます。
バージョン 1.5 以降、RabbitListener
エンドポイントのコンテナーに group
を割り当てることができるようになりました。これにより、コンテナーのサブセットへの参照を取得するメカニズムが提供されます。group
属性を追加すると、型 Collection<MessageListenerContainer>
の Bean がグループ名でコンテキストに登録されます。
デフォルトでは、コンテナーを停止するとコンシューマーがキャンセルされ、停止する前にプリフェッチされたすべてのメッセージが処理されます。バージョン 2.4.14、3.0.6 以降では、forceStop
コンテナープロパティを true に設定して、現在のメッセージが処理された直後に停止し、プリフェッチされたメッセージを再度キューに入れることができます。これは、たとえば、排他的または単一アクティブなコンシューマーが使用されている場合に便利です。