对于最新的稳定版本,请使用 Spring for Apache Kafka 3.3.0! |
容器线程命名
一个TaskExecutor
用于调用 Consumer 和 Listener。
您可以通过设置consumerExecutor
容器的ContainerProperties
.
使用池化执行程序时,请确保有足够的线程可用于处理使用它们的所有容器之间的并发。
使用ConcurrentMessageListenerContainer
中,来自执行程序的线程将用于每个使用者 (concurrency
).
如果您未提供使用者执行程序,则SimpleAsyncTaskExecutor
用于每个容器。
此执行程序创建名称类似于<beanName>-C-<n>
.
对于ConcurrentMessageListenerContainer
这<beanName>
线程名称的一部分变为<beanName>-m
哪里m
表示 Consumer 实例。n
每次启动容器时递增。
因此,使用 bean 名称container
,此容器中的线程将被命名为container-0-C-1
,container-1-C-1
等,在容器首次启动后;container-0-C-2
,container-1-C-2
等,在 stop 和随后的 start 之后。
从 version 开始3.0.1
,您现在可以更改线程的名称,而不管使用哪个执行程序。
将AbstractMessageListenerContainer.changeConsumerThreadName
property 设置为true
和AbstractMessageListenerContainer.threadNameSupplier
将调用以获取线程名称。
这是一个Function<MessageListenerContainer, String>
,默认实现返回container.getListenerId()
.