受信チャネルアダプター: リモートファイルフェッチの制御
受信チャネルアダプターを構成するときは、2 つのプロパティを考慮する必要があります。max-messages-per-poll
は、すべてのポーラーと同様に、各ポーリングで送信されるメッセージの数を制限するために使用できます(構成された値を超える準備ができている場合)。max-fetch-size
(バージョン 5.0 以降)は、一度にリモートサーバーから取得するファイルの数を制限できます。
次のシナリオでは、開始状態が空のローカルディレクトリであると想定しています。
max-messages-per-poll=2
およびmax-fetch-size=1
: アダプターは、1 つのファイルを取り出して発行し、次のファイルを取り出して発行します。その後、次のポーリングまでスリープします。max-messages-per-poll=2
およびmax-fetch-size=2
): アダプターは両方のファイルをフェッチしてから、それぞれを発行します。max-messages-per-poll=2
およびmax-fetch-size=4
: アダプターは、最大 4 つのファイル(使用可能な場合)をフェッチし、最初の 2 つを発行します(少なくとも 2 つある場合)。次の 2 つのファイルは、次のポーリングで発行されます。max-messages-per-poll=2
およびmax-fetch-size
が指定されていない: アダプターは、すべてのリモートファイルをフェッチし、最初の 2 つを発行します(少なくとも 2 つある場合)。後続のファイルは、後続のポーリングで発行されます(一度に 2 つ)。すべてが消費されると、リモートフェッチが再度試行され、新しいファイルが取得されます。
アプリケーションの複数のインスタンスをデプロイするときは、小さな max-fetch-size を設定して、1 つのインスタンスがすべてのファイルを「取得」し、他のインスタンスを枯渇させないようにすることをお勧めします。 |
max-fetch-size
のもう 1 つの用途は、リモートファイルのフェッチを停止するが、すでにフェッチされているファイルの処理を続行したい場合です。MessageSource
で maxFetchSize
プロパティを (プログラム的に、JMX 経由、または制御バス経由で) 設定すると、アダプターによるさらなるファイルのフェッチが効果的に停止されますが、ポーラーは以前にフェッチされたファイルに対するメッセージの出力を継続できるようになります。プロパティの変更時にポーラーがアクティブな場合、変更は次のポーリングで有効になります。
バージョン 5.1 以降、シンクロナイザーに Comparator<?>
を提供できます。これは、maxFetchSize
でフェッチされるファイルの数を制限するときに役立ちます。
バージョン 6.4 以降、AbstractRemoteFileStreamingMessageSource
には、処理されていない リモートファイルの参照をキャッシュから削除するための便利な clearFetchedCache()
API が追加されました。ポーリング構成では 1 サイクルですべての参照を処理できないため、参照はキャッシュに残ります。また、ターゲット SessionFactory
は、ポーリングサイクル間で (たとえば、RotatingServerAdvice
を介して) 変更される可能性があります。
FileListFilter
構成に関する情報については、一般的な SFTP 受信チャネルアダプターの章も参照してください。