配置任務排程器
在 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 所做的那樣。 |
有關更多資訊,另請參閱錯誤處理。