コンテナースレッドの命名

TaskExecutor は、コンシューマーとリスナーを呼び出すために使用されます。コンテナーの ContainerProperties の consumerExecutor プロパティを設定することで、カスタムエグゼキュータを提供できます。プールされたエグゼキューターを使用する場合は、それらが使用されているすべてのコンテナーで同時実行を処理するのに十分なスレッドが利用可能であることを確認してください。ConcurrentMessageListenerContainer を使用する場合、executor からのスレッドが各コンシューマー (concurrency) に使用されます。

コンシューマーエグゼキュータを提供しない場合、各コンテナーに SimpleAsyncTaskExecutor が使用されます。このエグゼキュータは、<beanName>-C-<n> に似た名前のスレッドを作成します。ConcurrentMessageListenerContainer の場合、スレッド名の <beanName> 部分は <beanName>-m になり、m はコンシューマーインスタンスを表します。n は、コンテナーが開始されるたびに増加します。Bean 名が container の場合、このコンテナー内のスレッドは、コンテナーが最初に開始された後に container-0-C-1container-1-C-1 などの名前になります。container-0-C-2container-1-C-2 など、停止およびその後の起動後。

バージョン 3.0.1 から、使用されているエグゼキューターに関係なく、スレッドの名前を変更できるようになりました。AbstractMessageListenerContainer.changeConsumerThreadName プロパティを true に設定すると、AbstractMessageListenerContainer.threadNameSupplier が呼び出されてスレッド名が取得されます。これは Function<MessageListenerContainer, String> であり、デフォルトの実装では container.getListenerId() が返されます。