スケジュールされたワークフローの重複実行 preventing-overlapping-execution-of-scheduled-workflows

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

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

一方、非ブロックアクティビティは、他のタスクの実行をブロックしません ( 通常、 Scheduler アクティビティ )。

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

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

ワークフローの設定

前回のワークフロー実行の 1 つ以上のタスクがまだ保留中かどうかを確認するには、 Query および Test アクティビティ。

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

  2. アクティビティのリソースをに変更します。 WorkflowTaskDetail。これは、ワークフローの現在のタスクをターゲットにすることを意味します。

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

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

      note note
      NOTE
      When a Scheduler 「 」アクティビティが開始されると、すぐに別のスケジュールタスクが追加され、次のスケジュール時刻に実行され、ワークフローが開始されます。 したがって、前回の実行から保留中のタスクを検索する場合は、クエリとスケジュールタスクの両方をフィルタリングすることが重要です。
    • 2 つ目のルールは、前回のワークフロー実行のタスクが、0 個の実行ステータスに対応する、アクティブ(保留中)であるかどうかを判定します。

  4. を追加します。 Test アクティビティを使用して、 Query アクティビティ。 これをおこなうには、2 つのアウトバウンドトランジションを設定します。

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

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

recommendation-more-help
3ef63344-7f3d-48f9-85ed-02bf569c4fff