前回まではApex(force.com)でSWFを触ってみましたが、今回はSWFに関する補足説明をしていきます!
【イベント登録に関する補足】
それぞれのActorがSWFに通知を行うことでワークフローが進むというのがSWFのおおまかな構造になっていますが、通知を行う毎にワークフロー上には
イベントが登録されていきます。
イベント登録の流れについては正常系フローに沿って書くと以下のようになります。
1. ワークフローのスタート
StartWorkflowExecutionを実行すると、WorkflowExecutionStarted、DecisionTaskScheduledの2つのイベントが登録されます。
2. Decision Taskの取得
PollForDecisionTaskを実行すると、スケジュールされたDecisionTaskがDeciderによって取得されDecisionTaskStartedのイベントが登録されます。
3. Decision&ActivityTaskの登録
RespondDecisionTaskCompleted(ScheduleActivityTaskDecision)を実行すると、DecisionTaskCompleted、ActivityTaskScheduledのイベントが登録されます。
4. Activity Taskの取得
PollActivityTaskを実行すると、Deciderによって登録されたActivityTaskがWorkerによって取得され、ActivityTaskStartedイベントが登録されます。
5. ActivityTaskの実行&完了通知(DecisionTaskの登録)
RespondActicityTaskCompletedを実行すると、ActivityTaskCompleted、DecisionTaskScheduledイベントが登録されます。
7. ワークフローの終了通知
CompleteWorkflowExecutionを実行すると、DecisionTaskCompleted、WorkflowExecutionCompletedイベントが登録されます。
【各種タイムアウトに関する補足】
タイムアウトは以下の種類があり、WorkflowTypeやActivityType側でそれぞれ、デフォルト値を設定することができます。
a. ワークフロー本体の開始から終了までの時間(Execution Start to Close timeout)
b. DecisionTask取得からDecisionTask完了通知までの時間(Task Start to Close timeout)
c. ActivityTask登録からActivityTask開始までの時間(Schedule to Start timeout)
d. ActivityTask取得からActivityTask完了までの時間(Start to Close timeout)
e. ActivityTask登録からActivityTask完了までの時間(Schedule to Close timeout)
f. WorkerのHeartbeatの時間間隔(Activity Task Heartbeat)
a~bはWorkflowType側でデフォルト値を設定し、
c~fはActivityType側でデフォルト値を設定。
e はタイムアウトの性質上[ e ≦ c + d]となるように設定。
f のHeartbeatとはWorkerが長時間のタスク処理をするときに
”ちゃんと作業しているよ!”っていう報告をさせるメカニズムで、これによって「ちゃんと仕事をしているのか」と
「サーバやWorkerアプリが落ちて作業できない状況なのか」等を判別することが可能になる。
要はSWF版の報連相ってとこですねw
進捗率をHeartbeatで報告させて、画面表示させるということもできるっぽい。
短時間で終わるようなタスクの場合は必要のないパラメータ値。
タイムアウトに関する詳細はリファレンスに書いてあるので、そちらを参照ください。
ここらへんのタイムアウト値の設定でDeciderやWorkerの生存確認が可能になり、
ワークフローの実行精度を上げることが出来るっぽいです。