对于最新稳定版本,请使用Spring for Apache Kafka 4.0.4spring-doc.cadn.net.cn

容器线程命名

一个 TaskExecutor 用于调用消费者和监听器。 可以通过设置容器的 consumerExecutor 属性提供自定义执行器。 在使用池化执行器时,确保有足够的线程来处理所有使用它们的容器中的并发。 在使用 ConcurrentMessageListenerContainer 时,每个消费者(concurrency)都会使用一个执行器线程。spring-doc.cadn.net.cn

如果未提供consumer执行器,则为每个容器使用一个SimpleAsyncTaskExecutor。 该执行器创建的线程名称类似于<beanName>-C-<n>。 对于ConcurrentMessageListenerContainer,线程名称的<beanName>部分变为<beanName>-m,其中m表示consumer实例。 n会在容器启动时递增。 因此,当bean名为container时,容器首次启动后的线程名称为container-0-C-1container-1-C-1等;在停止后再次启动时则为container-0-C-2container-1-C-2等。spring-doc.cadn.net.cn

从版本 3.0.1 开始,无论使用哪个执行器,都可以更改线程名称。 将 AbstractMessageListenerContainer.changeConsumerThreadName 属性设置为 true,然后 AbstractMessageListenerContainer.threadNameSupplier 会被调用以获取线程名称。 这是 Function<MessageListenerContainer, String>,默认实现返回 container.getListenerId()spring-doc.cadn.net.cn