2017-07-26 7 views
0

ワークフローを作成する要件があり、APIを呼び出してバッチジョブのセットをトリガーし、別のAPIをポーリングして各バッチジョブがいつ完了したかを確認します。すべてのバッチジョブが完了した場合にのみ、ワークフローは次のステップに移動できます。これを行う最善の方法は何ですか?すべてのジョブが完了するまで、Muleでポーリングする方法

私は投票コンポーネントを使用することを考えましたが、スケジュールされた時間に投票を実行したり、外部ソースを絶えずポーリングしていた経験があったため、投票を開始および停止する方法がわかりません。私の現在の考え方は、すべてのバッチジョブが完了したら、真に設定されている式ボックスにフラグを使用することです。

バッチジョブIDがすべてJSONオブジェクト内にあり、バッチジョブが完了したことを示す結果がAPIから返ってくるので、各バッチジョブIDをチェックするにはどうすればよいでしょうか?あなたのAPI呼び出しトリガー5バッチジョブを想定 -

私はAnypointメーカー6.2とミュール3.8.3

おかげ

答えて

0

ファーストを使用しています。各ジョブが完了すると、dbまたはオブジェクトストア(またはその他の取得可能な方法)でジョブの成功/失敗/進行中のステータスを更新する必要があります。

あなたの仕事が1時間以内に完了する最小時間を考えてみましょう。

DB内のステータスを更新しているものとします。

ジョブのステータスが1時間ごとにdbで成功/失敗したかどうかを確認するためのポーリングフローを作成し、stopped状態でフローを作成します。

<flow name="Job_status_check_flow" initialState="stopped"> 
    <poll doc:name="Poll"> 
     <fixed-frequency-scheduler frequency="1" timeUnit="HOURS"/> 
     <logger level="INFO" doc:name="Logger"/> 
    </poll> 
    <logger message="poll" level="INFO" doc:name="Logger"/> 
    <db component or object store here ---> 
</flow> 

フローが停止状態であるため、フローが開始状態に変わるまで、ポーリングは実行されません。あなたはコントロールを持っています。

常にフローは停止状態になります。同時に5つのバッチジョブを起動するようにapiに要求すると、 'Job_status_check_flow'をstartに開始します(groovyコンポーネントを使用すると、調子)。この場合、

Starting a mule flow programmatically using groovy

auto-starting Mule flow

下のリンクをチェックしてください、投票はDBが完了した状態に5つのジョブのすべてのステータスを取得するまで1時間ごとのステータスをチェックして流れます。もしそうなら、 'Job_status_check_flow'の末尾にぎこちないコンポーネントを持ってstopped stateにしてください。その投票はもう一度トリガーされません。

関連する問題