使用触发器检测外部事件
在 Azure 逻辑应用中,触发器始终将启动工作流作为第一步。 若要成功运行工作流,需要找到相应的触发器,并为场景设置触发器的属性。 本示例使用必应搜索触发器在发布有关行业的文章时运行工作流。
在本单元中,我们将检查触发器类型以及最常见选项的优缺点以及触发器如何处理输入和输出。
触发器类型
请考虑企业可能用于运行其逻辑应用工作流的各种触发条件。 我们看到的大多数示例都是具有以下用途的触发器,用于检测服务或系统中的数据或事件是否满足特定条件。 例如,当新文章可用时,会将新行添加到数据库、新电子邮件到达或将新文件上传到云存储。 检测数据或事件的触发器可以使用以下任一技术:
定期轮询或检查服务或系统是否存在满足条件的特定数据或事件的触发器
在特定数据或事件满足条件时,等待和接收来自服务或系统的推送通知的触发器
但是,如果需要一个未绑定到服务或系统中的数据或事件的触发器,该怎么办? 假设希望在每个星期六的午夜或其他某个计划运行工作流。 可以使用定期触发器来计划何时运行工作流中的任何操作。 例如,可以计划执行管理任务(如运行备份或存档旧数据)的工作流。
假设只想在从代码或其他源调用时才运行工作流? 可以使用“请求”或“手动”触发器来等待请求,例如,从 Web 应用或移动应用中的代码发送。
下图总结了前面描述的触发器类型:
以下各部分提供了有关轮询触发器和推送触发器的详细信息。
什么是轮询触发器?
轮询触触发器定期检查服务或系统中满足特定条件的数据或事件。 此检查后,如果触发器找到满足条件的数据或事件,则触发器将启动新的工作流运行。 例如,RSS 连接器具有轮询触发器,可以定期检查 RSS 源中的新帖子。
将轮询触发器添加到工作流后,可以设置频率和间隔来控制触发器的运行频率。 频率是时间单位,例如秒、分钟、小时、天、周或月。 间隔是在触发器再次检查数据或事件之前经过的时间单位数。 例如,频率为分钟且间隔为 5 的轮询触发器将每五分钟检查一次。
轮询触发器要求你在触发器的运行频率和运行成本之间进行选择。 通常,新数据或事件发生的时间与触发器检测到该数据或事件的时间之间存在延迟。 例如,假设轮询触发器每五分钟检查一次数据。 七分钟后可以获得新数据。 触发器在下次轮询(在 10 分钟时发生)之前不会检测到新数据。 下图显示了此轮询的工作原理:
在最坏的情况下,检测新数据的潜在延迟时间等于轮询间隔。 那么为什么不使用较小的间隔? 若要检查新数据,Azure 逻辑应用执行引擎需要运行工作流,这会产生成本。 通常,间隔越短,成本越高,但触发器对新数据或事件的响应速度更快。 触发器的最佳轮询间隔取决于业务流程及其对延迟的容忍度。
什么是推送触发器?
当数据或事件满足特定条件时,推送触发器会等待来自服务或系统的通知。 触发器订阅其他服务或系统上的终结点。 当新数据或事件满足条件时,服务或系统会通知触发器,从而立即开始新的工作流运行。 例如,Azure 服务总线连接器具有推送触发器,用于检测何时将邮件添加到 Azure 服务总线队列。
注意
推送触发器使用 Webhook,允许触发器订阅外部服务或系统。 在订阅时,Azure 逻辑应用会为触发器生成回调 URL,并将该 URL 注册到外部服务或系统。 同样,Azure 逻辑应用会在不再需要订阅时取消订阅和取消注册回调 URL(例如,禁用或删除工作流时)。
从积极的一面来看,当没有数据或事件可用时,推送触发器不会运行。 因此,他们不会产生像轮询那么多的成本。 当存在新数据或事件时,这些触发器也会立即响应。 下图显示了此推送过程的工作原理:
推送触发器比轮询触发器响应更快且成本更低,为什么不一直使用推送触发器呢? 遗憾的是,并非每个连接器都提供推送触发器。 服务或系统可能不支持推送触发器,或者连接器作者未选择实现推送触发器。 通常情况下,连接器会提供轮询触发器或推送触发器,但不会同时提供这两者。 只有在极少的情况下,连接器才会提供这两种选择,在这种情况下,请考虑使用推送触发器来提高效率和降低成本。
以下屏幕截图显示了设计器,其中包含新闻监视逻辑应用工作流,其中必应搜索触发器显示为第一步:
触发器参数和返回值
可以将触发器操作视为具有参数(输入)和返回值(输出)的函数调用。 使用触发器参数可配置操作。 必应搜索触发器名为“关于新新闻文章” 具有名为“搜索查询”的参数。 触发器使用此参数查找与搜索词匹配的新闻文章。 某些操作同时使用必需参数和可选参数。 名为“创建项时”的 SQL Server 触发器有一个名为“Table name”的必需参数和几个可选参数(如“Order By”和“Select Query”)。
触发器的返回值是触发器操作的结果或输出。 例如,在新的新闻文章上命名的必应搜索触发器会返回 NewsArticle 对象。 此对象包含名称、 URL和 说明等值。 Bitbucket 连接器有一个名为“合并拉取请求时”的触发器。 触发器返回一个对象,其中包含数据,如存储库标识和批准合并的参与者。
某些触发器会返回数组或集合,而不是单个项。 下图显示了此输出数组或集合的外观:
若要处理每个项,可以使用循环,例如 For each 或 Until 循环。
某些触发器接受数组或集合作为输入。 默认情况下,大多数触发器会自动拆分数组进行处理。 Azure 逻辑应用引擎会为每个项创建一个工作流实例,并并行运行所有实例,而不是让一个工作流实例处理整个数组。
下图显示了在发布源项拆分数组并将每个项发送到单个工作流实例进行处理时,RSS 触发器是如何命名的:
设计器中的触发器
工作流设计器包含一个连接器库,其中包含可在工作流中使用的触发器和操作。 通常,你会使用连接器库搜索框为你的方案查找并选择连接器。 然后,查看连接器提供的任何触发器。 以下屏幕截图显示了工作流设计器如何显示供你选择的连接器:
选择连接器后,将显示可用于该连接器的触发器:
下一单元演示如何在 Azure 门户中创建逻辑应用资源和工作流,以及如何在工作流设计器中添加和配置触发器。
连接器库会将连接器分组为以下常规类别:
连接器组 | 说明 |
---|---|
内置(应用内) | 在 Azure 逻辑应用运行时上以本机方式运行的触发器和操作。 某些操作直接适用于特定的 Azure 服务,而无需创建连接,例如 Azure Functions。 其他操作会执行任务,例如使用变量、控制工作流的路径或执行常规数据任务。 |
托管(共享) | 在多租户 Azure 中运行的触发器和操作,由 Microsoft 管理。 这些操作通常与单个服务或系统相关联,它们会接收或发送对其特定服务或系统的调用。 这些操作通常需要先创建连接。 |