スケジュールされたワークフローの重複実行

スケジュールされたワークフローの実行について

Campaign Standardでは、ワークフローエンジンはワークフローインスタンスが1つのプロセスのみで実行されることを保証します。 インポート、長時間実行中のクエリ、データベースへの書き込みなどのアクティビティをブロックすると、実行時に他のタスクが実行されなくなります。

一方、非ブロッキングアクティビティは他のタスク(通常は​Scheduler​アクティビティなどのイベントを待つアクティビティ)の実行をブロックしません。

これにより、同じワークフローの前回の実行が完了していない場合でも、スケジュールベースのワークフローで開始が実行され、予期しないデータの問題が発生する可能性があるシナリオが生じる可能性があります。

したがって、複数のワークフローを含むスケジュール済みのアクティビティをデザインする場合は、ワークフローが完了するまで再スケジュールされないようにする必要があります。 これを行うには、以前の実行の1つ以上のタスクがまだ保留中の場合に、ワークフローを実行しないように設定する必要があります。

ワークフローの設定

前のワークフロー実行の1つ以上のタスクがまだ保留中かどうかを確認するには、Query​と​Test​のアクティビティを使用する必要があります。

  1. <a1/追加>アクティビティの後の​Query​アクティビティを次のように設定します。Scheduler

  2. アクティビティのリソースを​WorkflowTaskDetail​に変更します。つまり、ワークフローの現在のタスクをターゲットします。

  3. 次のルールを使用してクエリを設定します。

    • 第1のルールは、現在のタスク(クエリ2)と、現在のワークフローに属する次のスケジュールタスク(スケジュール2)をフィルターします。

      メモ

      Scheduler​アクティビティ開始は、次にスケジュールされた時刻に実行する別のスケジュールタスクを即座に追加し、ワークフローを開始します。 したがって、前の実行から保留中のタスクを探す場合は、クエリとスケジュールタスクの両方をフィルタリングすることが重要です。

    • 2つ目のルールは、前回のワークフローの実行時に発生したタスクが、0実行ステータスに対応するアクティブ(保留)のままかどうかを指定します。

  4. <a1/追加>アクティビティが返す保留中のタスクの数を確認するための​Test​アクティビティ。 Query​これを行うには、2つの送信トランジションを設定します。

    • 最初のトランジションは、保留中のタスクがない場合、ワークフローの実行を続行します。
    • 2番目のトランジションは、保留中のタスクがある場合にワークフローの実行をキャンセルします。

これで、必要に応じて残りのワークフローを設定できます。 ワークフローの実行が保留中のタスクが原因で取り消された場合、スケジュールに従ってワークフローが再び実行されると、次の手順を実行できます。 これにより、前の実行からアクティブな(保留中の)タスクがない場合にのみ、ワークフローの実行が続行されます。

このページ