3

今日は、単一のアプリケーションでcron式によってスケジュールされたバッチジョブが数多くあります。私たちはこれらの仕事をより隔離して、それを春の雲の仕事に移したいと思います。スプリングクラウドタスクトリガーごとに1つのJVMプロセスが必要ですか?

しかし、ドキュメントを読んで[1]、私は私が最終的に新しいプロセスを起動するために順番にtasklauncher(シンク)へTaskLaunchRequestを送るtriggertask(ソース)を使用する必要が結論に来ます。

この手段(私は1つのタスクだけ/バッチを持っている場合)私は1つの新しいプロセスを起動するために実行し、少なくとも次のJVMプロセスが必要になります。

  • フローサーバ
  • triggertask(ソース)
  • tasklauncher (シンク)

OK、flow serverとtasklauncherは今後のタスクで共有されますが、triggertaskは1つのタスクのcron定義のみをとることができるため、fo次のタスク定義。だから私は少なくとも1つの "ナンヨーのプロセス"各タスクのために必要ですか?

本当に???これは巨大な過度のように思えます...私の見解では、cronのスケジューリングがタスク定義の中核機能であると予想していたので、必要なのはフローサーバーだけです。

私はこれが正しいことを理解していますか、私が逃したことはありますか?春のクラウド環境でこれを行う簡単な方法はありますか?私は、必要に応じて新しいJVMを開始するフローサーバーを持っているというアイデアが本当に好きですが、これらの追加のプロセスはすべて間違ったアプローチになります。

CloudFoundryで実行する必要がある場合。 http://run.pivotal.ioこれは私の35 $/Mth(Java BuildPack 4.0のJVM Processから512MBだけでもはや起動しない[2])というコストがかかる単一ジョブのcronスケジューラを持っていることを意味しています - それは高価なcron定義です...

[1] https://github.com/spring-cloud/spring-cloud-stream-app-starters/tree/master/triggertask/spring-cloud-starter-stream-source-triggertask [2] https://www.cloudfoundry.org/just-released-java-buildpack-4-0/

答えて

3

TL; DR;これを実行せずに、独自のスケジューリングロジックを作成するか、エンタープライズスケジューラにSpring Cloud Data FlowのREST APIを統合してください。

ロングバージョン
は、私はこの上で歴史のビットを与え、次に何をすべきかについて私の考えを提供してみましょう。

Spring Cloud Taskプロジェクトが開始されたとき、私たちは、多くの異なるユースケースでタスクの使用法を示した多数のサンプルアプリケーションを作成したかったのです。受信されたメッセージに反応してタスクを簡単に起動する機能は、サンプルを作成するために特定した1つのユースケースでした。そのサンプルはherehereです。

Spring Cloud Data Flow(SCDF)が発生したとき、で対処できるようにしたいユースケースの1つが、という方法でタスクをスケジューリングしていました。問題は、SCDFサーバーが(クラウドネイティブのマイクロサービスそのものなので)ステートレスにしたいということです。つまり、スケジューラの埋め込みはオプションではありません。そこから、各プラットフォームがスケジューリングに提供したものと統合することが最も理にかなっていると感じました。しかしそれはまた最も多くの仕事を必要とした。このアプローチは実際にはロードマップ上にありますが、その機能をリストの上位に押し出すためのユーザーのフィードバックはありませんでした。

この要件を短期間で解決するために行った解決策は、本日のドキュメントで見つけたものでした。これらのサンプルアプリケーションを、特定の時間にタスクを起動するためにパズルのcron部分を処理するアプリケーションtrigger-taskと組み合わせて再利用します。

あなたが既に使用しているスケジューラを持っていない場合は、Quartzまたは他の内部スケジューラ(Spring Schedulerなど)を使用するBootアプリケーションを作成して、SCDF APIを呼び出して所定のスケジュール。 DataFlowTemplateが利用可能であるとすれば、独自のスケジューラを作成することは簡単です。

+0

これらの詳細については、多くのありがとう!ですから、私が正しく理解していれば、将来的にCFとのネイティブスケジューラの統合が行われます。私が従うことができる問題はありますか? – domi

+1

こんにちは、@ドミ。特にCFの場合、CF-SchedulerのMVPがあり、SCDFのREST-APIを介してタスクをスケジュールして起動することができます。この考え方は、SCDFでDSLを定義し、CF-SchedulerのREST-APIを使用して、希望の日付/時刻またはcronのスケジュールを設定することです。 CFスケジューラチームは、ほぼ8月にGAリリースをターゲットにしています。 また、SCDFから(APIおよびサービスバインディングを介して)CFスケジューラと直接対話する計画もあります。私たちのダッシュボードには、各タスクの日付/時刻とcron式を提供する機能があります。 –

関連する問題