容器執行緒命名

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()