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

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

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

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

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

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

ワークフローの設定

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

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

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

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

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

      メモ

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

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

  4. Query​アクティビティが返す保留中のタスクの数を確認するために、Test​アクティビティを追加します。 これをおこなうには、2つのアウトバウンドトランジションを設定します。

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

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

このページ