将事件从 API 管理发送到事件网格

适用于:消耗|开发人员|基本|标准|高级

通过 API 管理与 Azure 事件网格的集成,你可以向其他服务发送事件通知,并触发下游流程。 事件网格是一个完全托管的事件路由服务,使用发布-订阅模型。 事件网格包含对 Azure 服务(如 Azure FunctionsAzure 逻辑应用)的内置支持,还可使用 Webhook 向非 Azure 服务传递事件警报。

可以订阅以下类型的 API 管理事件:

  • 控制平面事件:创建、更新或删除某些 API 管理资源时会生成这些事件。 例如,可以在 API 管理实例中创建新用户或新产品时收到事件。
  • 数据平面事件 (预览):这些事件是在 API 管理网关作期间生成的。 目前,API 管理可以为 后端断路器 和自承载网关 访问令牌的生命周期生成事件。

有关可用事件的完整列表,请参阅 API 管理的事件网格架构

API 管理与事件网格的集成关系图。

例如,使用与事件网格的集成,可以生成一个用于更新数据库、创建计费帐户,并在每次将用户添加到 API 管理实例时发送电子邮件通知的应用程序。

在本文中,你将在 API 管理实例中订阅事件网格事件,触发事件,然后将事件发送到用于处理数据的终结点。 为简单起见,你会将事件发送到收集并显示消息的示例 Web 应用:

先决条件

创建事件终结点

在本部分,你将使用资源管理器模板将一个预生成的示例 Web 应用程序部署到 Azure 应用服务。 稍后,你将订阅 API 管理实例的事件网格事件,并将此应用指定为事件要发送到的终结点。

若要部署示例应用,可以使用 Azure CLI、Azure PowerShell 或 Azure 门户。 以下示例在 Azure CLI 中使用 az deployment group create 命令。

  • RESOURCE_GROUP_NAME 设置为现有资源组的名称

  • SITE_NAME 设置为你的 Web 应用的唯一名称

    站点名称在 Azure 中必须是唯一的,因为它是 Web 应用的完全限定域名 (FQDN) 的一部分。 在稍后的部分,你将在 Web 浏览器中导航到该应用的 FQDN 以查看事件。

RESOURCE_GROUP_NAME=<your-resource-group-name>
SITE_NAME=<your-site-name>

az deployment group create \
    --resource-group $RESOURCE_GROUP_NAME \
    --template-uri "https://raw.githubusercontent.com/Azure-Samples/azure-event-grid-viewer/master/azuredeploy.json" \
    --parameters siteName=$SITE_NAME hostingPlanName=$SITE_NAME-plan

部署成功后(可能需要几分钟时间),打开浏览器并导航到 Web 应用,以确保它正在运行:

https://<your-site-name>.azurewebsites.net

此时你应会看到示例应用,但其中未显示事件消息。

注册事件网格资源提供程序

除非你以前使用过事件网格,否则需要注册事件网格资源提供程序。 如果以前使用过事件网格,请跳转到下一部分。

在 Azure 门户中,执行以下步骤:

  1. 在左侧菜单中选择“订阅”

  2. 从订阅列表中选择要用于事件网格的订阅

  3. 在“订阅”页左侧菜单的“设置”下,选择“资源提供程序”

  4. 搜索 Microsoft.EventGrid,并确认“状态”为“未注册”

  5. 在提供程序列表中选择“Microsoft.EventGrid”。

  6. 在命令栏上选择“注册”

    显示向 Azure 订阅注册 Microsoft.EventGrid 提供程序的图像。

  7. 刷新以确保 Microsoft.EventGrid 的状态更改为“已注册”

    显示向 Azure 订阅成功注册 Microsoft.EventGrid 提供程序的图像。

订阅 API 管理事件

在事件网格中订阅一个主题,以告知它你要跟踪的事件,以及要将事件发送到的位置。 在此处创建对 API 管理实例中事件的订阅。

  1. Azure 门户,导航到 API 管理实例。

  2. 选择“事件”>“+ 事件订阅”

  3. 在“基本信息”选项卡上

    • 输入事件订阅的描述性名称
    • 在“事件类型”中,选择要发送到事件网格的一种或多种 API 管理事件类型。 对于本文中的示例,请至少选择“Microsoft.APIManagement.ProductCreated”
    • 在“终结点详细信息”中选择“Web Hook”事件类型,单击“选择终结点”,然后输入 Web 应用 URL 再加上 api/updates。 示例:https://myapp.azurewebsites.net/api/updates
    • 选择“确认所选内容”
  4. 将其余选项卡上的设置保留为默认值,然后选择“创建”

    在 Azure 门户中创建事件订阅

触发和查看事件

正常运行示例应用并使用事件网格订阅 API 管理实例后,接下来可以生成事件。

例如,在 API 管理实例中创建一个产品。 如果事件订阅包括 Microsoft.APIManagement.ProductCreated 事件,则创建产品会触发一个推送到 Web 应用终结点的事件

导航到你的事件网格查看器 Web 应用,应会看到 ProductCreated 事件。 选择该事件旁边的按钮以显示详细信息。

事件网格查看器中的“已创建产品”事件

事件网格事件架构

API 管理事件数据包括 resourceUri(用于标识触发了事件的 API 管理资源)。 有关 API 管理事件消息架构的详细信息,请参阅事件网格文档:

API 管理的 Azure 事件网格事件架构