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

使用命名空间主题将事件传递到 Webhook - Azure 门户(预览版)

本文提供分步说明,介绍如何以 CloudEvents JSON 格式将事件发布到 Azure 事件网格,并使用推送传递模型来传递这些事件。 具体来说,你会将事件发布到事件网格中的命名空间主题,然后将这些事件从事件订阅推送到 Webhook 处理程序目标。 有关推送传递模型的详细信息,请参阅推送传递概述

注意

Azure 事件网格命名空间目前支持共享访问签名 (SAS) 令牌和访问密钥身份验证。

如果没有 Azure 订阅,请在开始之前创建一个 Azure 免费帐户

创建事件网格命名空间

事件网格命名空间提供用户定义的终结点,事件将发布到该终结点。 以下示例在 Azure Cloud Shell 中使用 Bash 在资源组中创建一个命名空间。 命名空间名称必须唯一,因为它是域名系统 (DNS) 条目的一部分。

  1. 导航到 Azure 门户。

  2. 在主题的搜索栏中,键入 Event Grid Namespaces 并从结果中选择 Event Grid Namespaces

    显示 Azure 门户中搜索栏的屏幕截图。

  3. 在“事件网格命名空间”页面上的命令栏中,选择“+ 创建”。 显示“事件网格命名空间”页的屏幕截图,已选中命令栏上的“创建”按钮。

  4. 在“创建命名空间”页上执行以下步骤:

    1. 选择要在其中创建命名空间的 Azure 订阅
    2. 通过选择“新建”或选择现有资源组来创建新的资源组
    3. 输入命名空间的名称
    4. 选择要创建资源组的位置
    5. 然后,选择“审阅并创建”。
      显示“创建命名空间”页的屏幕截图。
    6. 在“查看 + 创建”页面上,选择“创建”。
  5. 成功部署后,在“部署”页面上选择“转到资源”

获取访问密钥

  1. 在“事件网格命名空间”页面上,选择左侧菜单中的“访问密钥”。
  2. 选择“访问密钥”旁边的复制按钮。 显示“事件网格命名空间”页的屏幕截图,已选择“访问密钥”选项卡。
  3. 将访问密钥保存到某个位置。 本快速入门后面会用到它。

在命名空间中创建主题

创建一个主题,用于保存发布到命名空间终结点的所有事件。

  1. 在左侧菜单中选择“主题”
  2. 在“主题”页面上,选择命令栏上的“+ 主题”显示“主题”页的屏幕截图。
  3. 在“创建主题”页上执行以下步骤:
    1. 输入主题名称。
    2. 选择创建
      显示“创建主题”页的屏幕截图。

创建消息终结点

在订阅事件之前,让我们创建事件消息的终结点。 通常情况下,终结点基于事件数据执行操作。 为了简化此快速入门,将部署用于显示事件消息的预生成 Web 应用。 所部署的解决方案包括应用服务计划、应用服务 Web 应用和 GitHub 中的源代码。

  1. 选择“部署到 Azure”将解决方案部署到你的订阅。

    用于将资源管理器模板部署到 Azure 的按钮。

  2. 在“自定义部署”页上执行以下步骤:

    1. 对于“资源组”,请选择你在创建存储帐户时创建的资源组。 这样就可以在完成本教程后,通过删除资源组来更轻松地进行清理。

    2. 对于“站点名称”,请输入 Web 应用的名称。

    3. 对于“托管计划名称”,请输入用于托管 Web 应用的应用服务计划的名称。

    4. 选择“查看 + 创建”。

      显示“自定义部署”页的屏幕截图。

  3. 在“查看 + 创建”页面上,选择“创建”。

  4. 部署需要数分钟才能完成。 在“部署”页上,选择“转到资源组”。

    显示部署成功页的屏幕截图,其中包含用于转到资源组的链接。

  5. 在“资源组”页上,在资源列表中,选择你创建的 Web 应用。 在此列表中还可以看到应用服务计划和存储帐户。

    显示在资源组中选择 Web 应用的屏幕截图。

  6. 在 Web 应用的“应用服务”页上,选择相应的 URL 以导航到该网站。 URL 应采用以下格式:https://<your-site-name>.azurewebsites.net

    显示选择用于导航到 Web 应用的链接的屏幕截图。

  7. 确认你可以看到站点,但尚未有任何事件发布到站点。

    新网站的屏幕截图。

    重要

    使 Azure 事件网格查看器窗口保持打开状态,以便在发布事件时查看这些事件。

创建事件订阅

创建事件订阅,将其发送模式设置为“推送”,以支持推送发送

  1. 在使“事件中心命名空间”页面保持打开的情况下,切换到打开了“事件网格命名空间”页面的标签页或窗口
  2. 在“事件网格命名空间”页面上,选择左侧菜单中的“主题”
  3. 在“主题”页面上,选择在上一步中创建的主题
  4. 在命令栏上选择“+ 订阅”显示“主题”页的屏幕截图,已选中“创建订阅”按钮。
  5. 在“创建事件订阅”页上执行以下步骤:
    1. 在“基本”选项卡中,输入事件订阅的名称

    2. 为事件发送模式选择“推送”

    3. 对于“终结点类型”,选择 “Webhook”。

    4. 选择“配置终结点”

      显示“创建订阅”页的屏幕截图,已为“发送模式”选择“推送”并将

    5. WebHook 页上,指定终结点(例如:https://spegridsite0520.azurewebsites.net/api/updates),如以下示例所示,然后选择“确认选择”。

      显示具有订阅服务器终结点值的 WebHook 页面的屏幕截图。

    6. 返回“创建订阅”页,选择“创建”。

      显示“创建订阅”页的屏幕截图,其中填充了所有字段。

将事件发送到主题

现在,按照本部分中的步骤将示例事件发送到命名空间主题。

声明变量

  1. 在 Azure 门户中启动 Cloud Shell。 切换到“Bash”

    显示 Cloud Shell 的屏幕截图。

  2. 运行以下命令以声明一个变量来保存资源组名称。 将 RESOUREGROUPNAME 替换为 Azure 资源组的名称。

    resource_group=RESOURCEGROUPNAME
    
  3. 在 Cloud Shell 中运行以下命令,以声明一个变量来保存命名空间名称。 将 NAMESPACENAME 替换为事件网格主题的命名空间。

    namespace=NAMESPACENAME
    
  4. 运行以下命令,声明变量以保存前面记录的访问键值。 将 ACCESSKEY 替换为事件网格命名空间的访问密钥。

    key=ACCESSKEY
    
  5. 在 Cloud Shell 中运行以下命令,以声明一个变量来保存命名空间名称。

    topic=TOPICNAME
    

发布事件

  1. 检索命名空间主机名。 你将使用该主机名来编写要将事件发送到的命名空间 HTTP 终结点。 以下操作最初在 API 版本 2023-06-01-preview 中提供。 还可以从 Azure 门户中事件网格命名空间的“概述”页获取主机名

    publish_operation_uri="https://"$(az eventgrid namespace show -g $resource_group -n $namespace --query "topicsConfiguration.hostname" --output tsv)"/topics/"$topic:publish?api-version=2023-06-01-preview
    
  2. 创建一个符合 CloudEvents 规范的示例事件:

    event=' { "specversion": "1.0", "id": "'"$RANDOM"'", "type": "com.yourcompany.order.ordercreatedV2", "source" : "/mycontext", "subject": "orders/O-234595", "time": "'`date +%Y-%m-%dT%H:%M:%SZ`'", "datacontenttype" : "application/json", "data":{ "orderId": "O-234595", "url": "https://yourcompany.com/orders/o-234595"}} '
    

    data 元素是事件的有效负载。 可以将任何格式正确的 JSON 置于此字段中。 若要详细了解可在事件中添加的属性(也称为上下文属性),请查看 CloudEvents 规范。

  3. 使用 CURL 向主题发送事件。 CURL 是发送 HTTP 请求的实用工具。

    curl -X POST -H "Content-Type: application/cloudevents+json" -H "Authorization:SharedAccessKey $key" -d "$event" $publish_operation_uri
    

验证 Azure 事件网格查看器是否收到了该事件

验证 Azure 事件网格查看器 Web 应用是否显示其从事件网格收到的事件。

显示 Azure 事件网格查看器和接收到的事件示例的屏幕截图。

在本快速入门中,使用 Webhook 作为事件处理程序。 有关使用 Azure 事件中心作为事件处理程序的快速入门,请参阅使用命名空间主题将事件传递到 Azure 事件中心