容器執行緒命名
TaskExecutor
用於調用消費者和監聽器。您可以透過設定容器 ContainerProperties
的 consumerExecutor
屬性來提供自訂的執行器。當使用池化執行器時,請確保有足夠的執行緒可用於處理所有使用它們的容器中的並行性。當使用 ConcurrentMessageListenerContainer
時,執行器中的執行緒會用於每個消費者 (concurrency
)。
如果您沒有提供消費者執行器,則每個容器都會使用 SimpleAsyncTaskExecutor
。此執行器建立的執行緒名稱類似於 <beanName>-C-<n>
。對於 ConcurrentMessageListenerContainer
,執行緒名稱的 <beanName>
部分會變成 <beanName>-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<MessageListenerContainer, String>
,預設實作會回傳 container.getListenerId()
。