你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure 逻辑应用中发送、接收和批处理消息

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

若要以特定的方式将消息作为组一起发送和处理,可以创建批处理解决方案。 此解决方案会将消息收集到一个批处理中,并在满足指定的条件之前一直等待,然后再释放并处理批处理消息。 批处理可以减少逻辑应用处理消息的频率。

此操作指南介绍了如何按以下顺序在同一个 Azure 订阅和 Azure 区域中创建两个逻辑应用,从而构建批处理解决方案:

  1. “批接收方”逻辑应用:接受消息并将其收集到批中,直到满足发布和处理这些消息的指定条件。 请务必先创建该批接收方,然后才能在创建批发送方时选择批处理目标。

  2. 一个或多个“批发送方”逻辑应用:将消息发送到前面创建的批接收方。

    批发送方还可以指定唯一键,以基于该键将目标批分区或分割为逻辑子集。 例如,客户编号是唯一键。 这样,接收方应用便可以收集具有相同键的所有项,并统一处理它们。

批接收方和批发送方需要共享同一个 Azure 订阅和 Azure 区域。 否则,在创建批发送方时无法选择批接收方,因为它们相互不可见。

先决条件

限制

  • 发布后,只能通过将已发布的内容与源进行比较来检查批中的内容。

  • 仅可通过更改批处理接收器中的发布条件(本指南中所述)提前发布批处理,而触发器仍具有批处理。 但是,触发器对任何未发送的消息使用更新的发布条件。

创建批接收方

在将消息发送到某个批之前,该批必须存在且充当这些消息要发送到的目标。 因此,首先必须创建可以通过“批触发器”启动的“批接收方”逻辑应用工作流。 这样,在创建“批发送方”逻辑应用工作流时,便可以选择批接收方逻辑应用工作流。 批接收方会持续收集消息,直到满足发布和处理这些消息的指定条件。 尽管批接收方不需要知道有关批发送方的任何信息,但批发送方必须知道要将消息发送到的目标。

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

    此示例创建一个名为 BatchReceiver 的批接收方逻辑应用和工作流

  2. 在工作流设计器中,选择“添加触发器”,按照以下常规步骤添加名为 Batch Trigger 的“批操作”触发器

  3. 设置以下触发器属性:

    properties 说明
    模式
    (仅限消耗型工作流)
    - 内联:用于在批处理触发器中定义发布条件

    - 集成帐户:用于通过集成帐户定义多个发布条件配置。 使用集成帐户可在一个位置而不是独立的逻辑应用资源中维护这些配置。
    批名称 批名称。 在消耗工作流中,仅当“模式”设置为“内联”时,才会显示此属性。 此示例使用 TestBatch
    发布条件 在处理每个批之前要满足的条件。 默认情况下,批触发器使用“内联模式”运行,可采用这种模式在批触发器内定义批发布条件。

    - 基于消息计数:根据批收集的消息数发布批。

    - 基于大小:根据批收集的所有消息的总大小(以字节为单位)发布批。

    - 基于计划:根据指定间隔和频率的定期计划发布批。 (可选)可以选择时区,并提供开始日期和时间。

    要使用所有指定的条件,请选择所有选项。
    消息计数 要在批中收集的消息数,例如 10 条消息。 批消息限制为 8,000 条消息。
    批次大小 批中要收集的消息总大小(以字节为单位),例如 10 MB。 批大小限制为 80 MB。
    定期 发布批的间隔时间和频率,例如 10 分钟。 最小重复周期为 60 秒或 1 分钟。 分数分钟有效地向上舍入到 1 分钟。 (可选)可以选择时区,并提供开始日期和时间。

    注意

    如果在触发器仍具有已批处理但未发送的消息时更改发布条件,则触发器将使用更新的发布条件来处理未发送的消息。

    此示例显示了所有条件,但是对于自己的测试,请仅尝试一个条件:

    显示批触发器的所有条件的屏幕截图。

  4. 现在,添加一个或多个操作用于处理每个批。

    本示例添加一个可在批处理触发器激发时发送电子邮件的操作。 当批包含 10 个消息、达到 10 MB 或者在 10 分钟过后,该触发器将运行并发送电子邮件。

    1. 在批触发器下,依次选择加号 (+) “添加操作”>

    2. 按照以下常规步骤添加发送电子邮件的操作,具体取决于你的电子邮件提供商。

      例如,如果用户有工作或学校帐户(如 @fabrikam.com 或 @fabrikam.onmicrosoft.com),请选择 Microsoft 365 Outlook 连接器。 如果用户人帐户(如 @outlook.com 或 @hotmail.com),请选择 Outlook.com 连接器。 此示例使用 Microsoft 365 Outlook 连接器。

  5. 根据提示登录到电子邮件帐户。

  6. 设置以下操作属性:

    • 在“收件人”框中,输入收件人的电子邮件地址。 为进行测试,可以使用自己的电子邮件地址。

    • 选中“主题”框,查看动态内容列表(闪电图标)和表达式编辑器(函数图标)的选项。 选择闪电图标,打开动态内容列表,然后选择“分区名称”字段

      显示动态内容列表的屏幕截图,其中已选择“分区名称”属性字段。

      稍后,在批发送方中,可以指定唯一分区键,将目标批划分为可以在其中发送消息的逻辑子集。 每个集都具有批发送方逻辑应用工作流生成的唯一编号。 此功能使你可以使用具有多个子集的单个批,并且使用你提供的名称定义每个子集。

      重要

      分区的限制为 5,000 条消息或 80 MB。 如果满足任一条件,则 Azure 逻辑应用可能会发布批,即使不满足定义的发布条件。

    • 选中“正文”框,选择闪电图标以打开动态内容列表,然后选择“消息消息 ID”字段

      工作流设计器会自动在发送电子邮件操作周围添加 For each 循环,因为该操作会将上一个操作的输出视为集合而不是批。

      以下示例显示了信息窗格的内容,此窗格是在设计器中选择“For each”标题框后出现的,其中“Batched Items”是集合名称

      显示包含以前操作输出的 Batched Items 集合的屏幕截图。

  7. 保存工作流。 现已创建批接收方。

    重要

    如果你使用的是 Visual Studio Code,则在继续下一部分之前,请确保先将批接收方逻辑应用资源部署到 Azure。 否则,在创建批发送方逻辑应用工作流时,将无法选择批接收方逻辑应用工作流。

创建批发送方

现在创建一个或多个批发送方逻辑应用工作流,用于将消息发送到批接收方逻辑应用工作流。 在每个批发送方中,指定批接收方和批名称、消息内容及其他任何设置。 可以选择性地提供唯一分区键,以将批分割为子集,从而收集具有该键的消息。

  • 确保先前创建和部署了批接收方,这样在创建批发送方时,就可以选择现有的批接收方作为目标批。 尽管批接收方不需要知道有关批发送方的任何信息,但批发送方必须知道要将消息发送到何处。

  • 请确保批接收方和批发送方共享同一个 Azure 区域 Azure 订阅。 否则,在创建批发送方时无法选择批接收方,因为它们相互不可见。

  1. 创建名为 BatchSender 的另一个逻辑应用资源和工作流

    注意

    如果有标准逻辑应用资源,请确保创建有状态工作流,而不是无状态工作流,因为“定期”触发器对无状态工作流不可用

  2. 按照以下常规步骤添加名为“定期”的计划触发器

    此示例设置间隔和频率以便每分钟运行一次发送方工作流。

  3. 添加用于将消息发送到批的新操作。

    1. 在“定期” 触发器下,依次选择加号 () >“添加新操作”+

    2. 按照以下常规步骤,添加名为“发送到批触发器工作流”(消耗工作流)或“发送到批”(标准工作流)的“批操作”操作

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

      消耗工作流

      添加“发送到批触发器工作流”操作后,会显示一个列表,该列表仅包含具有批触发器的逻辑应用资源,这些资源与你的批发送方逻辑应用资源位于同一 Azure 订阅和 Azure 区域

      1. 从逻辑应用列表中,选择前面创建的逻辑应用,以用作批接收方。 出现可用触发器时,选择名为“Batch_messages”的触发器

        截图显示了一个消耗工作流,其中包含“定期”触发器和批发送方操作,并选择了一个批接收方逻辑应用资源和触发器。

        重要

        如果使用的是 Visual Studio Code 并且看不到任何可供选择的批接收方,请检查先前是否创建了批接收方并将其部署到 Azure。 如果未部署,请了解如何将批接收方逻辑应用资源部署到 Azure

      2. 完成后,选择“添加操作”

      标准工作流

      添加“发送到批处理”操作后,操作窗格将在下一步显示以下属性,供你指定批名称、消息内容、工作流名称和触发器名称。 只能为批接收方逻辑应用工作流指定信息,该工作流的批触发器与批发送方逻辑应用位于同一 Azure 订阅和 Azure 区域内

      标准工作流的屏幕截图,其中包含名为“定期触发器”和名为“发送到批”的操作。

  4. 设置以下批接收方操作属性:

    properties 说明
    批名称 接收方逻辑应用定义的批名称,在本示例中为“TestBatch”

    重要说明:批名称在运行时将接受验证,必须与批接收方逻辑应用指定的名称相匹配。 更改批名称会导致批发送方失败。
    消息内容 要发送的消息的内容。 有关可使用的值,请参阅以下示例。
    工作流名称
    (仅限标准工作流)
    具有批触发器的工作流的名称。
    Trigger Name 批接收方逻辑应用工作流中批触发器的名称。 在消耗工作流中,此值将从所选批接收方逻辑应用中自动填充。
    Workflow Id 工作流的 ID,该工作流具有批触发器名称批接收方逻辑应用工作流。 在消耗工作流中,此值将从所选批接收方逻辑应用中自动填充。

    在此示例中,对于“消息内容”属性值,将添加以下表达式,该表达式在要发送到批的消息内容中插入当前日期和时间

    1. 选中“消息内容”框,查看动态内容(闪电图标)和表达式编辑器(函数图标)的选项

    2. 选择函数图标以打开表达式编辑器。

    3. 在编辑器中,输入名为 utcnow() 的函数,然后选择“添加”

      消耗工作流

      屏幕截图显示了一个消耗工作流,包括批发送方操作窗格、“消息内容”框(带有光标)、表达式编辑器和 utcNow 函数,以及其他详细信息。

      标准工作流

      屏幕截图显示了一个标准工作流,包括批发送方操作窗格、“消息内容”框(带有光标)、表达式编辑器和 utcNow 函数,以及其他详细信息。

  5. 现在为批设置分区。

    1. 在批发送方操作窗格中,从“高级参数”列表中选择以下属性

      properties 说明
      分区名称 可选的唯一分区键,用于将目标批分割为逻辑子集,并基于该键收集消息。

      对于本示例,请按照以下步骤添加一个表达式,用于生成介于 1 和 5 之间的随机数。
      消息 ID 可选的消息标识符,为空时是系统生成的全局唯一标识符 (GUID)。 对于此示例,请将此值留空。
    2. 选中“分区名称”框,然后选择表达式编辑器(函数图标)的选项

    3. 在表达式编辑器中输入名为 rand(1,6) 的函数,然后选择“添加”

      此示例生成介于 1 与 5 之间的数字。 因此会将此批划分为五个带编号的分区(由此表达式动态设置)。

      屏幕截图显示了名为 rand 的函数,用于将一个批划分为多个分区。

      完成后,批发送方工作流现在看起来类似于以下示例,具体取决于逻辑应用工作流类型:

      消耗工作流

      显示已完成的批发送方消耗逻辑应用工作流的屏幕截图。

      标准工作流

      显示已完成的批发送方标准逻辑应用工作流的屏幕截图。

  6. 保存工作流。

测试工作流

要测试批处理解决方案,请让逻辑应用工作流运行几分钟。 很快,你会开始收到五封一组的电子邮件,它们具有相同的分区键。

批发送方逻辑应用每分钟运行一次,并生成一个介于 1 到 5 之间的随机数。 批发送方将此随机数用作发送消息的目标批的分区键。 每当批中包含具有相同分区键的 5 个项时,批接收方逻辑应用都会激发并针对每个消息发送邮件。

重要

完成测试之后,确保禁用或删除 BatchSender 逻辑应用工作流以停止发送消息,避免收件箱过载