|
这个版本仍在开发中,目前尚未被认为是稳定的。要使用最新稳定版本,请使用 Spring for Apache Kafka 4.0.4! |
容器线程命名
一个 TaskExecutor 用于调用消费者和监听器。
可以通过设置容器的 consumerExecutor 属性提供自定义执行器。
在使用池化执行器时,确保有足够的线程来处理所有使用它们的容器中的并发。
在使用 ConcurrentMessageListenerContainer 时,每个消费者(concurrency)都会使用一个执行器线程。
如果未提供consumer执行器,则为每个容器使用一个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等。
从版本 3.0.1 开始,无论使用哪个执行器,都可以更改线程名称。
将 AbstractMessageListenerContainer.changeConsumerThreadName 属性设置为 true,然后 AbstractMessageListenerContainer.threadNameSupplier 会被调用以获取线程名称。
这是 Function<MessageListenerContainer, String>,默认实现返回 container.getListenerId()。