配置任務排程器
在 Spring Integration 中,ApplicationContext
扮演著訊息匯流排的核心角色,您只需要考慮幾個配置選項。首先,您可能希望控制核心的 TaskScheduler
例項。可以透過提供一個名為 taskScheduler
的 bean 來實現。這也定義為一個常量,如下所示
IntegrationContextUtils.TASK_SCHEDULER_BEAN_NAME
預設情況下,Spring Integration 依賴於 ThreadPoolTaskScheduler
例項,如 Spring Framework 參考手冊的任務執行和排程部分所述。預設的 TaskScheduler
會自動啟動一個包含十個執行緒的執行緒池,但請參閱全域性屬性。如果您提供自己的 TaskScheduler
例項,則可以將其 'autoStartup' 屬性設定為 false
或提供自己的執行緒池大小值。
當輪詢消費者在其配置中提供明確的任務執行器引用時,處理器方法的呼叫會在該執行器的執行緒池中發生,而不是在主排程器執行緒池中。但是,如果端點的輪詢器沒有提供任務執行器,則它將由主排程器的執行緒之一呼叫。
不要在輪詢器執行緒上執行長時間執行的任務。請改用任務執行器。如果有很多輪詢端點,除非增加執行緒池大小,否則可能導致執行緒飢餓。此外,輪詢消費者的預設 receiveTimeout 為一秒。由於輪詢器執行緒會阻塞這段時間,我們建議在存在大量此類端點時使用任務執行器,同樣是為了避免飢餓。或者,可以減小 receiveTimeout 。 |
如果端點的輸入通道是基於佇列(即可輪詢的)通道之一,則該端點是一個輪詢消費者。事件驅動消費者是指輸入通道具有分發器而不是佇列(換句話說,它們是可訂閱的)的端點。這類端點沒有輪詢器配置,因為它們的處理器是直接呼叫的。 |
在 JEE 容器中執行時,您可能需要使用 Spring 的
|
當在應用程式上下文中配置了自定義的 TaskScheduler (例如上面提到的 DefaultManagedTaskScheduler )時,建議為其提供一個 MessagePublishingErrorHandler (integrationMessagePublishingErrorHandler bean),以便能夠將異常作為傳送到錯誤通道的 ErrorMessage`s 處理,就像框架提供的預設 `TaskScheduler bean 那樣。 |
另請參閱錯誤處理以獲取更多資訊。