コンテナースレッドの命名
TaskExecutor
は、コンシューマーとリスナーを呼び出すために使用されます。コンテナーの ContainerProperties
の consumerExecutor
プロパティを設定することで、カスタムエグゼキュータを提供できます。プールされたエグゼキューターを使用する場合は、それらが使用されているすべてのコンテナーで同時実行を処理するのに十分なスレッドが利用可能であることを確認してください。ConcurrentMessageListenerContainer
を使用する場合、executor からのスレッドが各コンシューマー (concurrency
) に使用されます。
コンシューマーエグゼキュータを提供しない場合、各コンテナーに SimpleAsyncTaskExecutor
が使用されます。このエグゼキュータは、<beanName>-C-<n>
に似た名前のスレッドを作成します。ConcurrentMessageListenerContainer
の場合、スレッド名の <beanName>
部分は <beanName>-m
になり、m
はコンシューマーインスタンスを表します。n
は、コンテナーが開始されるたびに増加します。Bean 名が container
の場合、このコンテナー内のスレッドは、コンテナーが最初に開始された後に container-0-C-1
、container-1-C-1
などの名前になります。container-0-C-2
、container-1-C-2
など、停止およびその後の起動後。
バージョン 3.0.1
から、使用されているエグゼキューターに関係なく、スレッドの名前を変更できるようになりました。AbstractMessageListenerContainer.changeConsumerThreadName
プロパティを true
に設定すると、AbstractMessageListenerContainer.threadNameSupplier
が呼び出されてスレッド名が取得されます。これは Function<MessageListenerContainer, String>
であり、デフォルトの実装では container.getListenerId()
が返されます。