你当前正在访问 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) 条目的一部分。
导航到 Azure 门户。
在主题的搜索栏中,键入
Event Grid Namespaces
并从结果中选择Event Grid Namespaces
。在“创建命名空间”页上执行以下步骤:
成功部署后,在“部署”页面上选择“转到资源”。
获取访问密钥
在命名空间中创建主题
创建一个主题,用于保存发布到命名空间终结点的所有事件。
创建消息终结点
在订阅事件之前,让我们创建事件消息的终结点。 通常情况下,终结点基于事件数据执行操作。 为了简化此快速入门,将部署用于显示事件消息的预生成 Web 应用。 所部署的解决方案包括应用服务计划、应用服务 Web 应用和 GitHub 中的源代码。
选择“部署到 Azure”将解决方案部署到你的订阅。
在“自定义部署”页上执行以下步骤:
对于“资源组”,请选择你在创建存储帐户时创建的资源组。 这样就可以在完成本教程后,通过删除资源组来更轻松地进行清理。
对于“站点名称”,请输入 Web 应用的名称。
对于“托管计划名称”,请输入用于托管 Web 应用的应用服务计划的名称。
选择“查看 + 创建”。
在“查看 + 创建”页面上,选择“创建”。
部署需要数分钟才能完成。 在“部署”页上,选择“转到资源组”。
在“资源组”页上,在资源列表中,选择你创建的 Web 应用。 在此列表中还可以看到应用服务计划和存储帐户。
在 Web 应用的“应用服务”页上,选择相应的 URL 以导航到该网站。 URL 应采用以下格式:
https://<your-site-name>.azurewebsites.net
。确认你可以看到站点,但尚未有任何事件发布到站点。
重要
使 Azure 事件网格查看器窗口保持打开状态,以便在发布事件时查看这些事件。
创建事件订阅
创建事件订阅,将其发送模式设置为“推送”,以支持推送发送。
- 在使“事件中心命名空间”页面保持打开的情况下,切换到打开了“事件网格命名空间”页面的标签页或窗口。
- 在“事件网格命名空间”页面上,选择左侧菜单中的“主题”。
- 在“主题”页面上,选择在上一步中创建的主题。
- 在命令栏上选择“+ 订阅”。
- 在“创建事件订阅”页上执行以下步骤:
在“基本”选项卡中,输入事件订阅的名称。
为事件发送模式选择“推送”。
对于“终结点类型”,选择 “Webhook”。
选择“配置终结点”。
在 WebHook 页上,指定终结点(例如:
https://spegridsite0520.azurewebsites.net/api/updates
),如以下示例所示,然后选择“确认选择”。返回“创建订阅”页,选择“创建”。
将事件发送到主题
现在,按照本部分中的步骤将示例事件发送到命名空间主题。
声明变量
在 Azure 门户中启动 Cloud Shell。 切换到“Bash”。
运行以下命令以声明一个变量来保存资源组名称。 将
RESOUREGROUPNAME
替换为 Azure 资源组的名称。resource_group=RESOURCEGROUPNAME
在 Cloud Shell 中运行以下命令,以声明一个变量来保存命名空间名称。 将
NAMESPACENAME
替换为事件网格主题的命名空间。namespace=NAMESPACENAME
运行以下命令,声明变量以保存前面记录的访问键值。 将
ACCESSKEY
替换为事件网格命名空间的访问密钥。key=ACCESSKEY
在 Cloud Shell 中运行以下命令,以声明一个变量来保存命名空间名称。
topic=TOPICNAME
发布事件
检索命名空间主机名。 你将使用该主机名来编写要将事件发送到的命名空间 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
创建一个符合 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 规范。使用 CURL 向主题发送事件。 CURL 是发送 HTTP 请求的实用工具。
curl -X POST -H "Content-Type: application/cloudevents+json" -H "Authorization:SharedAccessKey $key" -d "$event" $publish_operation_uri
验证 Azure 事件网格查看器是否收到了该事件
验证 Azure 事件网格查看器 Web 应用是否显示其从事件网格收到的事件。
相关内容
在本快速入门中,使用 Webhook 作为事件处理程序。 有关使用 Azure 事件中心作为事件处理程序的快速入门,请参阅使用命名空间主题将事件传递到 Azure 事件中心。