跳到主要内容
版本:4.1.1

容器线程命名

Doubao 中英对照 Container Thread Naming

TaskExecutor 用于调用 consumer 和监听器。你可以通过设置容器 ContainerProperties 的 consumerExecutor 属性来提供自定义执行器。使用池化执行器时,请确保有足够的线程来处理所有使用它们的容器之间的并发。使用 ConcurrentMessageListenerContainer 时,执行器中的一个线程用于每个 consumer(concurrency)。

如果你不提供 consumer 执行器,则每个容器使用一个 SimpleAsyncTaskExecutor。该执行器创建名称类似于 <beanName>-C-<n> 的线程。对于 ConcurrentMessageListenerContainer,线程名中的 <beanName> 部分变为 <beanName>-m,其中 m 表示 consumer 实例。每次容器启动时 n 都会递增。因此,对于名为 container 的 bean,该容器中的线程在首次启动后将被命名为 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()。