容器執行緒命名

一個 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 屬性設定為 trueAbstractMessageListenerContainer.threadNameSupplier 將被呼叫以獲取執行緒名稱。這是一個 Function<MessageListenerContainer, String>,預設實現返回 container.getListenerId()

© . This site is unofficial and not affiliated with VMware.