前回まではApex(force.com)でSWFを触ってみましたが、今回はSWFに関する補足説明をしていきます!

 

【イベント登録に関する補足】

それぞれのActorがSWFに通知を行うことでワークフローが進むというのが

SWFのおおまかな構造になっていますが、通知を行う毎にワークフロー上には

イベントが登録されていきます。

 

イベント登録の流れについては正常系フローに沿って書くと以下のようになります。

1. ワークフローのスタート

StartWorkflowExecutionを実行すると、

WorkflowExecutionStarted、DecisionTaskScheduledの2つのイベントが登録されます。

StartWorkflowExecution

 

2. Decision Taskの取得

PollForDecisionTaskを実行すると、スケジュールされたDecisionTaskがDeciderによって取得され

DecisionTaskStartedのイベントが登録されます。

PollForDecisionTask

 

3. Decision&ActivityTaskの登録

RespondDecisionTaskCompleted(ScheduleActivityTaskDecision)を実行すると、

DecisionTaskCompleted、ActivityTaskScheduledのイベントが登録されます。

ScheduleActivityTaskDecision

 

4. Activity Taskの取得

PollActivityTaskを実行すると、Deciderによって登録されたActivityTaskが

Workerによって取得され、ActivityTaskStartedイベントが登録されます。

PollActivityTask

 

5. ActivityTaskの実行&完了通知(DecisionTaskの登録)

RespondActicityTaskCompletedを実行すると、

ActivityTaskCompleted、DecisionTaskScheduledイベントが登録されます。

RespondActicityTaskCompleted

 

7. ワークフローの終了通知

CompleteWorkflowExecutionを実行すると、

DecisionTaskCompleted、WorkflowExecutionCompletedイベントが登録されます。

CompleteWorkflowExecution

 

 【各種タイムアウトに関する補足】

タイムアウトは以下の種類があり、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の生存確認が可能になり、

ワークフローの実行精度を上げることが出来るっぽいです。