2016-05-23 8 views
1

すべてのファイルのすべてのプロセスを終了した後、春の統合で自動シャットダウンを作成する方法は?私のアプリケーションは、入力として多くのファイルを使用し、最後のエンドポイントとしてhttpアウトバウンドゲートウェイを使用するので、私は各ファイルの入力に対してhttpアウトバウンド要求を持っており、シャットダウンのトリガとしてそのエンドポイントからの最後のhttp応答を使用しようとします。 ())スプリング統合。私の考えは、(System.currentTime() - lastTimeGatewayResponse)> = idleTimeをトリガとして使用することです。しかし、私はそのゲートウェイからlastTimeGatewayResponseを取得する方法を見つけることができませんでした。春の統合自動シャットダウン

その後、私はhttp://forum.spring.io/forum/spring-projects/integration/116366-orderly-shutdown-how-to-know-when-downstream-executor-is-idleをフォローしようとします。しかし、私のアプリケーションはプロセスが終了していない間にシャットダウンしているので、myopは最高の方法ではありません。

誰でもこれについての経験はありますか?

おかげ

答えて

0

あなたは4.2.xでは(現在のバージョンは4.2.6である)を使用している場合は、返信チャネルでchannel.getTimeSinceLastSend()を呼び出すことができます。

javadocsには数秒であると書かれていますが、それは正しくありません。ミリ秒です。

0

実際には、lastTimeGatewayResponseは、そのゲートウェイのreply-channeltimeSinceLastSendと完全に同等です。

したがって、httpアウトバウンドゲートウェイ用にoutputreply-channel)と指定して、timeSinceLastSendでシャットダウンロジックを実行することができます。

一方、類似しているものの、より堅牢な動作を実現するには、<aggregator>を使用してください。 correlationKeyをすべてのファイルに対して静的なものとして使用し、<aggregator>の入力アクションとしてシャットダウンをトリガーすることができます。リリース戦略は、入力ファイルの数です。

+0

メインクラスエントリポイント(context.xmlと呼ばれる場所)から "lastTimeGatewayResponse/timeSinceLastSend"を呼び出すことはできますか?エンドポイント内で呼び出す必要がありますか?あなたのアドバイスではの中にあります。もし私がcontext.close()を呼び出す方法をしたら?前もって感謝します。 – Harji

+0

私に例を教えてもらえますか?ありがとう。申し訳ありませんがたくさんのリクエスト。 – Harji

+0

これは 'main'の場合、通常、メインスレッドをブロックするものがないため、コンテキストの更新直後に停止します。とにかく 'timeSinceLastSend'プロパティにアクセスして、そのコンテキストから' MessageChannel'を取得することができます。定期的にまたは各ファイルプロセスの副イベントとして、それを行うべきであるという問題。あなたが最後のものの直後に 'アイドル時間 'を持つ必要があるからです。 –