0

着信フォルダーを監視してファイルを処理する春の統合アプリケーションがあります。アプリケーションがメンテナンスまたはその他の理由でダウンしている場合、着信フォルダーはアップストリーム アプリケーションによって 100K ファイルでいっぱいになります。アプリケーションを再起動すると、フリーズし、受信ファイルが処理されず、すべての受信ファイルをロードしようとしている可能性があります。

ここに構成があります

<file:inbound-channel-adapter id="inFiles" channel="inFilesin" directory="file:${incoming.folder}" 
    queue-size="300" filename-regex="(?i)^(?!.*writing) " auto-startup="true" auto-create-directory="false" >
        <int:poller id="fw.fileInboudPoller" fixed-rate="1" receive-timeout="3" time-unit="SECONDS"
            max-messages-per-poll="10" task-executor="taskExecutor" />
</file:inbound-channel-adapter>

<task:executor id="taskExecutor" pool-size="10-20" queue-capacity="20" rejection-policy="CALLER_RUNS" />

あなたの助けに感謝。

ありがとう、モハン

4

1 に答える 1

0

への変更fixed-rateを提案しfixed-delayます。

ファイルの処理が非常に遅く、最初のオプションは、新しいタスクをその時間の直後に開始する必要があることを示しています (この場合は 1 秒)。

もう一つの問題 - rejection-policy="CALLER_RUNS"。この場合、スレッド キューが使い果たされる場合 (100K ファイルの場合)、スケジュールされたスレッドが実際の作業を行います。ポーラーは、タスクをスケジュールするために、ThreadPoolTaskSchedulerサイズ10を使用します。したがって、この「重い負荷」では、そのプールがすべてのアプリケーションで共有されるため、アプリがフリーズする可能性があります。

ということで、使ってみてくださいfixed-delay。この場合、アプリはフリーズしませんが、ファイルの処理は遅くなります。

多分これはあなたを助けることができます:<int:resource-inbound-channel-adapter>

于 2013-11-18T18:33:05.813 に答える