使用 Azure 逻辑应用中的定期触发器计划和运行重复工作流

适用范围:Azure 逻辑应用(消耗型 + 标准型)

若要按计划启动和运行工作流,可以使用常规定期触发器作为第一步。 可以设置启动工作流的日期、时间和时区,以及设置设置重复该工作流的定期计划。 以下列表列出了一些此触发器支持的模式,以及更高级的重复规则和复杂的计划安排:

  • 在特定的日期和时间运行,然后每隔 n 秒、分钟、小时、天、周或月重复运行。

  • 立即运行,并每隔 n 秒、分钟、小时、天、周或月重复运行。

  • 立即运行,然后在每日的一个或多个特定时间(例如上午 8:00 和下午 5:00)重复运行。

  • 立即运行,然后每周在特定的星期(例如星期六和星期日)重复运行。

  • 立即运行,然后每周在特定的星期和时间(例如星期一至星期五上午 8:00 和下午 5:00)重复运行。

注意

高级计划选项(例如 在这些小时在这些日期)可用,但仅适用于内置轮询触发器,例如 重复滑动窗口 触发器,这些触发器直接在 Azure 逻辑应用运行时中运行。 对于在 Azure 中管理、托管和运行的连接器,轮询触发器仅使用间隔频率值(而不是高级计划选项)来计算下一个重复周期。

重复触发器不与任何特定服务相关联,因此可将其用于几乎任何工作流,例如 消耗型逻辑应用工作流和标准逻辑应用有状态工作流。 此触发器目前不可用于标准逻辑应用无状态工作流

重复触发器是内置“计划”连接器的一部分,并在 Azure 逻辑应用运行时上原生运行。 有关内置计划触发器和操作的详细信息,请参阅使用 Azure 逻辑应用计划和运行定期自动执行的任务和工作流

先决条件

添加重复触发器

根据您的工作流是否为消耗型或标准型,请按照相应步骤操作:

  1. Azure 门户中,打开逻辑应用资源和空白工作流。

  2. 按照以下常规步骤添加名为 重复计划 内置触发器。

  3. 设置重复的间隔和频率。 在此示例中,请将这些属性设置为每周运行工作流,例如:

    显示“重复”触发器间隔和频率的消耗型工作流设计器屏幕截图。

    属性 JSON 名称 必填 类型 说明
    时间间隔 interval 整数 一个正整数,描述工作流基于频率运行的频繁度。 下面是最小和最大间隔:

    - 月龄:1-16个月
    - 周:1-71 周
    - 天:1-500 天
    - 小时:1~12,000 小时
    - 分钟:1-72,000 分钟
    - 秒:1-9,999,999 秒

    例如,如果间隔为 6,频率为“月”,则重复周期为每 6 个月。
    频率 frequency 字符串 重复周期的时间单位:分钟小时

    重要:如果使用“”、“”或“”频率并指定将来的日期和时间,请确保提前设置重复周期。 否则,工作流可能会跳过第一个重复周期。

    - :至少提前 24 小时设置每日重复。

    - :至少提前 7 天设置每周重复周期。

    - :至少提前一个月设置每月重复周期。
    时区 timeZone 字符串 仅在指定开始时间时才适用,因为此触发器不接受 UTC 偏移量。 选择要应用的时区。 有关详细信息,请参阅默认时区
    开始时间 startTime 字符串 提供开始日期和时间,该日期和时间最远不能超过未来 49 年,并且必须遵循 ISO 8601 日期时间规范,采用 UTC 日期时间格式,但不包含 UTC 偏移量:

    如果选择了时区,则格式为 YYYY-MM-DDThh:mm:ss

    -或-

    如果未选择时区,则格式为 YYYY-MM-DDThh:mm:ssZ

    例如,如果希望 2024 年 9 月 18 日下午 2:00,请指定“2024-09-18T8:00:00”并选择时区,例如太平洋标准时间。 或者,在没有时区的情况下指定“2024-09-18T8:00:00Z”。

    重要提示: 如果未选择时区,必须在末尾添加字母“Z”(无空格)。 此“Z”表示采用 UTC 偏移量的 UTC 时间格式。 如果选择时区值,则无需在“开始时间”值的末尾添加“Z”。 如果这样做,Azure 逻辑应用会忽略时区值,因为“Z”表示 UTC 时间格式。

    对于简单计划,开始时间就是首次触发时间;对于复杂计划,触发器不会在开始时间之前触发。 可通过哪些方式使用开始日期和时间?

    根据选择 “周 ”还是 “日”,以下属性可用:

    属性 JSON 名称 必填 类型 说明
    在这些日期 weekDays 字符串或字符串数组 如果选择 “周”,则可以选择要运行工作流的一个或多个天: 星期一星期二星期三星期四星期五星期六星期日
    在以下时间点 hours 整数或整数数组 如果选择 “天 ”或 “周”,可以选择一个或多个从 0 到 23 的整数作为运行工作流的一天中的小时数。 例如,如果指定 101214,则一天中的小时将得到 10 AM、12 PM 和 2 PM。

    注意:默认情况下,根据重复周期开始的时间计算当天的分钟数。 若要设置一天中的特定分钟,例如上午 10 点、中午 12 点和下午 2 点,请使用“在这些分钟”属性指定这些值。
    此刻 minutes 整数或整数数组 如果选择 “天 ”或 “周”,可以选择一个或多个从 0 到 59 的整数作为运行工作流的小时分钟数。

    例如,可以将 30 指定为分钟标记,并使用前一个示例获取 10:30 AM、12:30 PM 和 2:30 PM。

    注意:有时,已触发运行的时间戳可能与计划时间相差最多 1 分钟。 如果需要将时间戳完全按计划传递给后续操作,则可以使用模板表达式来相应地更改时间戳。 有关详细信息,请参阅表达式的日期和时间函数
  4. 使用 Recurrence 触发器时,请查看以下注意事项:

    • 除非您指定特定的 开始日期和时间,否则保存工作流或部署逻辑应用资源时,第一个运行会立即发生,即使您的触发器绑定了周期设置。 若要避免此行为,请指定首次重复运行的开始日期和时间。

    • 如果你未指定任何其他高级计划选项(例如具体时间)来运行将来的重复周期,则这些将来的重复周期会以上一次运行时间为基础。 因此,这些重复运行的开始时间可能会因存储调用期间的延迟等因素而出现漂移。

    • 为了确保工作流不会错过重复周期(特别是在频率为几天或更长时间一次的情况下),请尝试以下选项:

      • 提供重复周期的开始日期和时间,以及运行后续重复周期的具体时间。 您可以使用名为 在这些小时在这些分钟 的属性,它们仅在 频率下可用。

      • 对于消耗型逻辑应用工作流,请使用 滑动窗口触发器,而不是 重复 触发器。

    • 如果使用 ARM 模板部署具有定期触发器的已禁用消耗型工作流,则启用此工作流时,触发器会立即触发,除非在部署之前设置“开始时间”参数

    例如,假设今天是 2024 年 9 月 4 日星期三。 以下 重复 触发器不会 早于 指定的开始日期和时间启动,即 2024 年 9 月 18 日上午 8:00 太平洋时间。 但是,该重复计划设置为仅在每周一的上午 10:30、12:30 和下午 2:30 执行。 首次触发触发器并创建工作流实例的时间为星期一上午 10 点 30 分。 若要详细了解开始时间的工作方式,请参阅这些开始时间示例

    后续运行将在同一天的下午 12:30 和下午 2:30 进行。 每次重复都会创建各自的工作流实例。 之后,在下一个星期一,整个计划会再次从头开始重复。 还有哪些其他示例情况?

    屏幕截图显示了“消费”工作流和“重复”触发器,包含高级调度示例。

    注意

    仅当选择“”或“”作为频率时,触发器才显示指定的重复周期的预览。

  5. 现在继续使用其他操作生成工作流。

工作流定义 - 重复

可以通过查看消费型逻辑应用和标准逻辑应用(仅限有状态)中工作流的底层 JSON 定义,了解定期触发器定义在你所选选项下会如何显示。

根据逻辑应用是消耗型还是标准型,选择以下选项之一:

  • 使用量:在设计器工具栏中,选择 代码视图。 若要返回设计器,请在代码视图编辑器工具栏上选择“设计器”。

  • 标准:在工作流菜单中选择“代码视图”。 若要返回设计器,请在工作流菜单中选择“设计器”。

以下示例展示了 重复 触发器定义可能会如何出现在工作流的底层 JSON 定义中:

"triggers": {
   "Recurrence": {
      "type": "Recurrence",
      "recurrence": {
         "frequency": "Week",
         "interval": 1,
         "schedule": {
            "hours": [
               10,
               12,
               14
            ],
            "minutes": [
               30
            ],
            "weekDays": [
               "Monday"
            ]
         },
         "startTime": "2024-09-18T8:00:00Z",
         "timeZone": "Pacific Standard Time"
      }
   }
}

注意

Recurrence 触发器定义中,当重复条件中出现任何表达式或参数引用时,evaluatedRecurrence 属性会与 recurrence 属性一起出现。 此 evaluatedRecurrence 属性表示基于表达式或参数引用的计算值。 如果定期条件未指定任何表达式或参数引用,则 evaluatedRecurrencerecurrence 属性相同。

以下示例显示如何更新触发器定义,以便触发器仅在每个月的最后一天运行一次:

"triggers": {
    "Recurrence": {
        "recurrence": {
            "frequency": "Month",
            "interval": 1,
            "schedule": {
                "monthDays": [-1]
            }
        },
        "type": "Recurrence"
    }
}

在月份的最后一天运行一次

对于此任务,你必须使用代码视图(而不是设计器),并参考以下示例,在工作流的底层 JSON 定义中编辑 重复 触发器:

"triggers": {
    "Recurrence": {
        "recurrence": {
            "frequency": "Month",
            "interval": 1,
            "schedule": {
                "monthDays": [-1]
            }
        },
        "type": "Recurrence"
    }
}

触发器重复移位和漂移

计划作业时,Azure 逻辑应用会将要处理的消息放入队列中,并指定该消息何时变得可用,具体取决于运行上次作业的 UTC 时间和计划运行下次作业的 UTC 时间。 如果为重复周期指定了开始时间,请确保选择时区,以便逻辑应用工作流在指定的开始时间运行。 定期触发器遵循你设置的计划,包括你指定的任何时区。

否则,如果未选择时区,计划事件可能会影响触发器何时运行。 但是,当时间发生变化时,某些时间窗口可能会引发问题。 有关详细信息和示例,请参阅夏令时和标准时间循环