容器執行緒命名

使用 `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()`。