Azure 逻辑应用 中定期工作流触发器的计划

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

Azure 逻辑应用有助于创建并按计划运行自动化重复性工作流。 通过创建以 定期 触发器或 滑动窗口 触发器(这两者均为“计划”类型触发器)开始的逻辑应用工作流,你可以立即、稍后或按重复间隔运行任务。 可以调用 Azure 内部和外部的服务(例如 HTTP 或 HTTPS 终结点)、将消息发送到 Azure 存储和 Azure 服务总线等 Azure 服务,或者将文件上传到文件共享。 使用“重复”触发器,您还可以为任务运行设置复杂的计划和高级重复规则。 若要详细了解计划内置触发器和操作,请参阅计划触发器计划操作

以下列表显示了可以使用计划内置触发器运行的一些示例任务:

  • 获取内部数据,例如每天运行某个 SQL 存储过程。

  • 获取外部数据,例如每隔 15 分钟从 NOAA 提取天气报告。

  • 发送报告数据,例如通过电子邮件发送过去一周内超过特定金额的所有订单的摘要。

  • 处理数据,例如在每个工作日的非高峰时间压缩当日的已上传图像。

  • 清除数据,例如删除超过三个月的所有推文。

  • 存档数据,例如在未来 9 个月的每天凌晨 1:00 将发票推送到备份服务。

在下一操作运行之前,还可以使用计划内置操作来暂停工作流,例如:

  • 等到工作日通过电子邮件发送状态更新。

  • 在恢复和检索结果前,延迟工作流直到 HTTP 调用有时间完成。

本指南介绍计划类型内置触发器和操作所具备的功能。

无需创建多个逻辑应用即可运行定期工作负载

你可以计划和运行定期工作负载,无需为每个计划的作业单独创建消耗型逻辑应用,也不会遇到每个区域和订阅的工作流限制。 可以创建一个包含多个工作流的标准型逻辑应用,也可以使用由 Azure 快速启动模板:逻辑应用作业计划程序创建的消耗型逻辑应用模式。

Azure 逻辑应用作业计划程序模板会创建一个名为 CreateTimerJob 的逻辑应用,该应用会调用 TimerJob 逻辑应用。 然后,你可以通过发出 HTTP 请求并传递一个计划作为请求的输入,以 API 的形式调用 CreateTimerJob 逻辑应用。 每次调用 CreateTimerJob 逻辑应用时,都会调用 TimerJob 逻辑应用,这会创建一个根据指定计划持续运行的、或者一直运行到达到指定限制的新 TimerJob 实例。 这样,便可以运行任意数目的 TimerJob 实例,而无需担心工作流限制,因为实例不是单独的逻辑应用工作流定义或资源

定时触发器

可以使用重复触发器滑动窗口触发器(不与任何特定服务或系统关联)来启动逻辑应用工作流。 这些触发器基于指定的重复周期来启动并运行工作流,你可以在该周期中选择时间间隔和频率(例如,秒数、分钟数、小时数、天数、周数或月数)。 你还可以设置开始日期和时间以及时区。 每当一个触发器激发时,Azure 逻辑应用服务将为你的逻辑应用创建并运行一个新的工作流实例。

下面是这些触发器之间的差异:

  • 重复周期:根据指定的计划按固定的时间间隔运行工作流。 如果触发器错过了重复周期(例如,由于中断或禁用工作流而错过),则“重复周期”触发器不会处理错过的重复周期,但会根据下一个计划的时间间隔重启重复周期

    如果选择 Day 作为频率,则可以指定每天的小时和分钟,例如每天 2:30。 如果选择“周”作为频率,则还可以选择星期几,例如“星期三”和“星期六”。 你还可以为定期计划指定开始日期和时间以及时区。 有关时区格式设置的详细信息,请参阅添加重复触发器

    重要

    如果使用“天”、“周”或“月”频率并指定将来的日期和时间,请确保提前设置重复周期:

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

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

    • :至少提前一个月设置每月重复。

    否则,工作流可能会跳过第一个重复周期。

    如果某个定期触发未指定具体的开始日期和时间,则在保存或部署逻辑应用时,会立即运行第一次定期触发,而不管触发器的定期设置如何。 若要避免此行为,请指定首次重复运行的开始日期和时间。

    如果某个重复计划未指定任何其他高级计划选项,例如用于安排将来重复执行的具体时间,则这些后续重复执行将以上次运行时间为依据。 因此,这些重复项的开始时间可能会由于存储调用期间的延迟等因素而出现漂移。 为确保工作流不会漏掉重复执行,尤其是在重复间隔为几天或更长时间时,请尝试以下选项:

    • 为重复周期指定开始日期和时间,以及后续每次重复运行的具体时间,可使用名为 At these hoursAt these minutes 的属性来设置;这些属性仅适用于 DayWeek 频率。

    • 请使用滑动窗口触发器,而不要使用重复触发器。

    有关详细信息,请参阅使用重复触发器创建、计划和运行重复性任务与工作流

  • 滑动窗口:按定期时间间隔运行工作流来处理连续区块中的数据。 如果触发器错过了定期触发(例如,由于中断或禁用工作流而错过),则滑动窗口触发器会返回并处理错过的定期触发。

    可以指定开始日期和时间以及时区,并可以指定一个持续时间来延迟工作流中的每个重复周期。 此触发器不支持高级计划,例如,一天中的特定小时,一小时中的特定分钟,以及一星期中的特定几天。 有关详细信息,请参阅使用滑动窗口触发器创建、计划和运行重复性任务与工作流

注意

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

安排操作

在逻辑应用工作流中指定任何操作后,可以使用“延迟”和“延迟到”操作来使工作流等到下一个操作运行为止。

  • 延迟:按指定的时间单位数(例如秒数、分钟数、小时数、天数、周数或月数)等待运行下一操作。 有关详细信息,请参阅延迟工作流中的下一操作

  • 延迟截止时间:在指定的日期和时间之前等待运行下一操作。 有关详细信息,请参阅延迟工作流中的下一操作

开始日期和时间的模式

下面这些模式将演示如何使用开始日期和时间控制重复计划,以及 Azure 逻辑应用如何运行这些重复计划:

开始时间 无计划重复 按计划重复(仅适用于重复触发器)
{无} 即时运行第一个工作负荷。

基于上次运行时间运行将来的工作负荷。
即时运行第一个工作负荷。

根据指定的计划运行未来的工作负载。
开始时间在过去 重复触发器:基于指定的开始时间计算运行时间,并丢弃过去的运行时间。

在下一次运行时间运行第一个工作负载。

基于上次运行时间运行将来的工作负荷。

滑动窗口触发器:基于指定的开始时间计算运行时间,并遵循过去的运行时间。

基于指定的开始时间运行将来的工作负载。

有关详细说明,请参阅此表格后面的示例。
根据基于开始时间计算得出的计划,首次运行工作负载的时间不会早于开始时间。

根据指定的计划运行未来工作负载。

注意:如果针对计划指定了定期模式,但没有为该计划指定小时或分钟数,则 Azure 逻辑应用会分别使用小时或分钟来计算将来的运行时间(从首次运行时间算起)。
开始时间为当前时间或未来时间 在指定的开始时间运行第一个工作负荷。

重复触发器:基于上次运行时间运行将来的工作负载。

滑动窗口触发器:基于指定的开始时间运行未来的工作负载。
根据基于开始时间计算得出的计划,在不早于开始时间时运行首次工作负载。

根据指定的计划运行未来工作负载。 如果使用“天”、“周”或“月”频率并指定将来的日期和时间,请确保提前设置重复周期

- :至少提前 24 小时设置为每日重复。
- :至少提前 7 天设置每周重复周期。
- :至少提前一个月设置每月重复。

否则,工作流可能会跳过第一个重复周期。
注意:如果针对计划指定了定期模式,但没有为该计划指定小时或分钟数,则 Azure 逻辑应用会分别使用小时或分钟来计算将来的运行时间(从首次运行时间算起)。

指定了过去开始时间和重复周期但未指定计划的示例

假设当前日期和时间是 2017 年 9 月 8 日下午 1:00。 将开始日期和时间指定为已过去的 2017 年 9 月 7 日下午 2:00,重复周期为每隔两天运行一次。

开始时间 当前时间 重复 计划
2017-09-07T14:00:00Z
(2017-09-07 下午 2:00)
2017-09-08T13:00:00Z
(2017-09-08 下午 1:00)
每隔两天 {无}

对于“重复周期”触发器,Azure 逻辑应用引擎会基于开始时间计算运行时间,忽略过去的运行时间,使用下一个将来开始时间作为首次运行时间,并基于上次运行时间计算将来的运行

下面是此重复周期的大致形式:

开始时间 首次运行时间 将来的运行时间
2017-09-07 下午 2:00 2017-09-09 下午 2:00 2017-09-11 下午 2:00
2017-09-13 下午 2:00
2017-09-15 下午 2:00
依此类推...

因此,不管在过去的多长期限内指定了开始时间(例如,2017-09-05 下午 2:00,或 2017-09-01 下午 2:00),首次运行始终使用下一个将来的开始时间。

对于滑动窗口触发器,Azure 逻辑应用引擎会基于开始时间计算运行时间,遵循过去的运行时间,为首次运行使用该开始时间,并基于该开始时间计算将来的运行。

下面是此重复周期的大致形式:

开始时间 首次运行时间 将来的运行时间
2017-09-07 下午 2:00 2017-09-08 的下午 1:00(当前时间) 2017-09-09 下午 2:00
2017-09-11 下午 2:00
2017-09-13 下午 2:00
2017-09-15 下午 2:00
依此类推...

因此,不管在过去的多长期限内指定了开始时间(例如,2017-09-05 下午 2:00,或 2017-09-01 下午 2:00),首次运行始终使用指定的开始时间。

每月的最后一天运行一次

若要仅在每月的最后一天运行一次重复触发器,请参阅在每月的最后一天运行一次

示例重复周期

下面是可为支持上述选项的触发器设置的各种示例重复周期:

触发器 重复 时间间隔 频率 开始时间 在这些日子 在这些时段 此时 注意
重复
滑动窗口
每隔 15 分钟运行(没有开始日期和时间) 15 分钟 {无} {不可用} {无} {无} 此计划立即启动,然后根据上次运行时间计算将来的重复周期。
复发
滑动窗口
每隔 15 分钟运行(有开始日期和时间) 15 分钟 startDateTstartTimeZ {不可用} {无} {无} 此计划不会在指定的开始日期和时间之前启动,将根据上次运行时间计算将来的重复周期。
复发
滑动窗口
每隔一小时整点运行(有开始日期和时间) 1 小时 startDateThh:00:00Z {不可用} {无} {无} 此计划不会在指定的开始日期和时间之前启动。 后续重复运行会在每小时的“00”分执行,这是 Azure 逻辑应用根据开始时间计算得出的。

如果频率为“周”或“月”,则该计划分别仅在每周的一天或每月的一天运行。
复发
滑动窗口
每天每隔一小时运行(没有开始日期和时间) 1 小时 {无} {不可用} {无} {无} 此计划立即启动,并根据上次运行时间计算将来的重复周期。

如果频率为“周”或“月”,则该计划将分别仅在每周的一天或每月的一天运行。
复发
滑动窗口
每天每隔一小时运行(有开始日期和时间) 1 小时 startDateTstartTimeZ {不可用} {无} {无} 此计划不会在指定的开始日期和时间之前启动,将根据上次运行时间计算将来的重复周期。

如果频率为“周”或“月”,则该计划分别仅在每周的一天或每月的一天运行。
重现
滑动窗口
每隔一小时在整点过后的第 15 分钟运行(有开始日期和时间) 1 小时 startDateT00:15:00Z {不可用} {无} {无} 此计划不会在指定的开始日期和时间之前启动。 将来的重复计划按“15”分钟标记(Azure 逻辑应用基于开始时间计算的)运行,即凌晨 00:15、1:15、2:15 等。
重复 每隔一小时在整点过后的第 15 分钟运行(没有开始日期和时间) 1 日期 {无} {不可用} 0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、22、23 15 此计划在 00:15 AM、1:15 AM、2:15 AM 等有规律的时间运行。 此外,此计划相当于频率为“小时”且开始时间为“15”分钟。
重复 每 15 分钟在指定的分钟点运行(不设置开始日期和时间)。 1 日期 {无} {不可用} 0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、22、23 0、15、30、45 此计划要到下一个指定的 15 分钟时间点才会启动。
重复 每天上午 8 点加上保存逻辑应用时的分钟标记运行 1 日期 {无} {不可用} 8 {无} 如果没有开始日期和时间,此计划将基于你保存逻辑应用(PUT 操作)的时间运行。
重复 每天上午 8:00 运行(有开始日期和时间) 1 日期 startDateT08:00:00Z {不可用} {无} {无} 此计划不会在指定的开始日期和时间之前启动。 后续执行时间为每天上午 8:00。
重复 每日上午 8:00 运行(无开始日期和时间) 1 日期 {无} {不可用} 8 00 此计划每天上午 8:00 运行。
重复 每天上午 8:00 和下午 4:00 执行 1 日期 {无} {不可用} 8, 16 0
重复 每天于上午 8:30、8:45,下午 4:30 和 4:45 运行 1 日期 {无} {不可用} 8, 16 30, 45
重复 在每个星期六下午 5:00 运行(没有开始日期和时间) 1 {无} “星期六” 十七 0 此计划在每个星期六的 5:00 PM 运行。
重复 在每个星期六下午 5:00 运行(有开始日期和时间) 1 startDateT17:00:00Z “星期六” {无} {无} 此计划不会在指定的开始日期和时间(在本例中为 2017 年 9 月 9 日 5:00 PM)之前启动。 今后的重复任务将在每周六下午 5:00 执行。
重复 每周二、周四下午 5 点运行,再加上保存逻辑应用时的分钟值 1 {无} “星期二”、“星期四” 十七 {无}
重复 在工作时间内每小时运行一次。 1 {无} 选择除星期六和星期日外的所有日期。 选择您想要的一天中的小时。 选择所需的任意分钟数。 例如,如果工作时间为上午 8:00 到下午 5:00,则选择“8、9、10、11、12、13、14、15、16、17”作为该天中的小时,并加上“0”作为该小时的分钟。
重复 在周末每天运行一次 1 {无} "星期六", "星期日" 选择您想要的小时。 根据需要选择该小时内的任意分钟。 此计划根据指定的计划在每个星期六和星期日运行。
重复 仅在每两周一次的星期一每 15 分钟运行一次 2 {无} “星期一” 0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、22、23 0、15、30、45 此计划每两周的星期一每隔 15 分钟运行一次。
重复 每月运行一次 1 月份 startDateTstartTimeZ {不可用} {不可用} {不可用} 此计划不会在指定的开始日期和时间之前启动,将基于开始日期和时间计算将来的重复周期。 如果未指定开始日期和时间,则此计划使用创建日期和时间。
重复 在每个月每隔一小时运行一天 1 月份 {参阅备注} {不可用} 0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21、22、23 {参阅备注} 如果未指定开始日期和时间,则此计划使用创建日期和时间。 若要设置重复计划的分钟,请指定每小时中的分钟值、开始时间,或使用创建时间。 例如,如果开始时间或创建时间为上午 8:25,则该计划将于上午 8:25、上午 9:25、上午 10:25 等时间运行,依此类推。

排查重复发生问题

为了确保工作流在你指定的开始时间启动,并且不会错过后续重复执行(尤其是在重复频率为按天或更长间隔时),请尝试以下解决方案:

  • DST 生效时,请手动调整重复周期,使工作流继续按预期时间运行。 否则,开始时间将在 DST 开始时向前移动 1 小时,在 DST 结束时向后移动 1 小时。 有关更多信息和示例,请参阅夏令时和标准时间的重复周期

  • 若要使用 重复 触发器,请指定时区、开始日期和开始时间。 此外,还可在仅适用于 频率的属性 在这些小时在这些分钟 中,配置后续重复运行的具体时间。 但是,当时间发生变化时,某些时间窗口仍可能会引发问题。

  • 请考虑使用滑动窗口触发器,而不要使用重复触发器,以避免错过重复执行。

后续步骤