タスクスケジューラの構成
Spring Integration では、ApplicationContext
はメッセージバスの中心的なロールを果たします。いくつかの構成オプションのみを考慮する必要があります。最初に、主要な TaskScheduler
インスタンスを制御したい場合があります。そのためには、taskScheduler
という名前の単一の Bean を提供します。これは、次のように定数としても定義されます。
IntegrationContextUtils.TASK_SCHEDULER_BEAN_NAME
デフォルトでは、Spring Integration は、Spring Framework リファレンスマニュアルのタスクの実行とスケジューリングセクションに従って、ThreadPoolTaskScheduler
のインスタンスに依存します。デフォルトの TaskScheduler
は、10 個のスレッドのプールで自動的に起動しますが、グローバルプロパティを参照してください。代わりに独自の TaskScheduler
インスタンスを提供する場合は、'autoStartup' プロパティを false
に設定するか、独自のプールサイズ値を指定できます。
ポーリングコンシューマーが構成で明示的なタスクエグゼキューター参照を提供すると、ハンドラーメソッドの呼び出しはメインスケジューラープールではなく、エグゼキューターのスレッドプール内で発生します。ただし、エンドポイントのポーラーにタスクエグゼキューターが提供されていない場合、メインスケジューラーのスレッドの 1 つによって呼び出されます。
ポーラースレッドで長時間実行されるタスクを実行しないでください。代わりにタスクエグゼキューターを使用してください。ポーリングエンドポイントが多数ある場合、プールサイズを大きくしない限り、スレッド不足が発生する可能性があります。また、ポーリングコンシューマーのデフォルト receiveTimeout は 1 秒です。この時間はポーラースレッドがブロックするため、このようなエンドポイントが多数存在する場合は、タスクエグゼキューターを使用して、飢 again を回避することをお勧めします。あるいは、receiveTimeout を減らすことができます。 |
入力チャネルがキューベース(つまり、ポーリング可能)チャネルの 1 つである場合、エンドポイントはポーリングコンシューマーです。イベント駆動型コンシューマーとは、キューではなくディスパッチャーを備えた入力チャネルを持つコンシューマーです(つまり、サブスクライブ可能です)。そのようなエンドポイントには、ハンドラーが直接呼び出されるため、ポーラー構成がありません。 |
JEE コンテナーで実行する場合、デフォルトの
|
カスタム TaskScheduler がアプリケーションコンテキストで構成されている場合(上記の DefaultManagedTaskScheduler のように)、フレームワークによって提供される ErrorMessage`s sent to the error channel, as is done with the default `TaskScheduler Bean として例外を処理できるように、MessagePublishingErrorHandler (integrationMessagePublishingErrorHandler Bean)を提供することをお勧めします。 |
詳細については、エラー処理も参照してください。