跳到主要内容

容器线程命名

ChatGPT-4o-mini 中英对照 Container Thread Naming

TaskExecutor 用于调用消费者和监听器。您可以通过设置容器的 ContainerPropertiesconsumerExecutor 属性来提供自定义执行器。当使用池化执行器时,请确保有足够的线程可用于处理所有使用它们的容器中的并发性。当使用 ConcurrentMessageListenerContainer 时,执行器中的一个线程将用于每个消费者(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()