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

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

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

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

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

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

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

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

注意

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

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

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

先决条件

添加重复触发器

根据工作流是消耗还是标准,遵循相应的步骤:

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

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

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

    消耗型工作流设计器的屏幕截图,其中使用“定期”触发间隔和频率。

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

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

    例如,如果间隔为 6,频率为“月”,则重复周期为每 6 个月。
    频率 frequency String 定期计划的时间单位:“秒”、“分钟”、“小时”、“天”、“周”或“月”

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

    天:至少提前 24 小时设置每日重复周期。

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

    - :至少提前一个月设置内每月重复周期。
  4. 使用 Recurrence 触发器时,请查看以下注意事项:

    • 如果你未指定具体的开始日期和时间,则在保存工作流或部署逻辑应用资源时,系统会立即运行第一次重复周期,而不管触发器的重复周期如何。 若要避免此行为,请提供你希望运行第一次定期触发的开始日期和时间。

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

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

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

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

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

  5. 若要设置高级计划选项,请打开“添加新参数”列表。 选择的任何选项会在选定后显示在触发器中。

    properties JSON 名称 必须 类型​​ 说明
    时区 timeZone String 仅当指定启动时间时才适用,因为此触发器不接受 UTC 时差。 选择要应用的时区。 有关详细信息,请参阅默认时区
    开始时间 startTime 字符串 提供一个开始日期和时间,该日期和时间在未来最长为 49 年,并且必须遵循 UTC 日期时间格式的 ISO 8601 日期时间规范,但没有 UTC 时差:

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

    -或-

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

    例如,如果需要 2020 年 9 月 18 日下午 2 点,则指定“2020-09-18T14:00:00”并选择时区(如“太平洋标准时间”)。 或者,指定“2020-09-18T14:00:00Z”且不选择时区。

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

    对于简单计划,开始时间指首次运行时间;对于复杂计划,触发器的激发时间不会早于开始时间。 可通过哪些方式使用开始日期和时间?
    在这些日期 weekDays 字符串或字符串数组 如果选择“周”,则可以选择要运行工作流的一天或多天:“星期一”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”和“星期日”
    在这些小时 hours 整数或整数数组 如果选择了“天”或“周”,则可以从 0 到 23 的范围内选择一个或多个整数,作为当天要运行工作流的小时时间。 例如,如果指定“10”、“12”和“14”,则一天中的时间分别为上午 10 点、中午 12 点和下午 2 点。

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

    例如,可以指定“30”作为分钟标记并使用前面示例中的当天小时时间,这样,便可以指定10:30 AM、12:30 PM 和 2:30 PM 作为开始时间。

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

    消耗型工作流设计器和“定期”触发器的屏幕截图,其中包含高级计划选项。

    例如,假设当天是 2020 年 9 月 4 日星期五。 以下定期触发器不会在指定的开始日期和时间 2020 年 9 月 18 日星期五上午 8 点(太平洋时间)之前触发。 但是,该定期计划设置为仅在每个星期一的 10:30 AM、12:30 PM 和 2:30 PM 运行。 首次触发触发器并创建工作流实例的时间为星期一上午 10 点 30 分。 若要详细了解开始时间的工作方式,请参阅这些开始时间示例

    将来的运行发生在同一天的 12:30 PM 和 2:30 PM。 每个定期计划会创建其自身的工作流实例。 之后,在下一个星期一,整个计划会再次从头开始重复。 还有哪些计划示例?

    屏幕截图显示消耗型工作流和“定期”触发器,其中包含高级计划示例。

    注意

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

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

工作流定义 - 定期

可以通过查看消耗逻辑应用和标准逻辑应用中的工作流(仅限有状态)的基础 JSON 定义,来查看定期触发器定义如何与选择的选项一起显示。

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

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

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

以下示例显示了定期触发器定义如何显示在工作流的基础 JSON 定义中:

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

注意

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

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

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

仅运行一次

若要在将来只运行工作流一次,可以应用计划程序:运行一次作业工作流模板,该模板仅适用于消耗型逻辑应用工作流。 此模板使用请求触发器和 HTTP 操作,而不是使用不支持此定期模式的定期触发器。

  1. Azure 门户中,创建一个消耗型逻辑应用。

  2. 在设计器中,打开空白工作流。 在设计器工具栏上,选择“启用旧设计器”。

  3. 在设计器工具栏上,选择“模板”。

  4. 在打开的页面上,滚动到视频之后的“模板”部分。

  5. 类别列表中,选择计划,然后选择以下模板:

    屏幕截图显示了名为“计划程序运行一次”作业的所选模板。

  6. 在设计器工具栏上,选择正式版设计器

  7. 按照以下常规步骤添加名为“延迟直到”的计划操作,并提供下一个操作开始运行的时间。

或者,可以使用名为收到 HTTP 请求时请求触发器来启动工作流,并将开始时间作为触发器的参数传递。

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

对于此任务,必须使用代码视图(而不是设计器)在工作流的基础 JSON 定义中编辑重复触发器,而不是设计器:

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

触发器重复周期移动和偏移

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

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

后续步骤