容器线程命名

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

如果您不提供消费者执行器,则每个容器都会使用一个 `SimpleAsyncTaskExecutor`。该执行器创建的线程名称类似于 `-C-`。对于 `ConcurrentMessageListenerContainer`,线程名称中的 `` 部分变为 `-m`,其中 `m` 代表消费者实例。`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`,其默认实现返回 `container.getListenerId()`。