在这个快速入门中,你使用Azure CLI在Azure 事件网格中创建自定义主题,订阅该自定义主题,并触发一个示例事件以查看结果。
通常,你会将事件发送到处理事件数据并执行操作的终结点。 不过,为了简化这个快速入门,你需要将示例事件发送到一个收集并显示消息的网页应用。 完成后,你会在网页应用中看到事件数据,如下图所示:
如果您没有 Azure 试用订阅,请在开始之前创建 试用订阅。
先决条件
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展。
运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade。
- 此快速入门要求使用 2.0.70 或更高版本的 Azure CLI。
- 如果你是 Azure 事件网格 的新手,在开始这个快速入门之前,请先了解 What is Azure 事件网格 来了解该服务的概览。
创建资源组
事件网格主题是Azure资源,必须放置在Azure资源组中。 资源组是一个逻辑集合,用于部署和管理 Azure 资源。
使用“az group create”命令创建资源组。 以下示例在“chinanorth2”位置创建名为“gridResourceGroup”的资源组。 如果你愿意,可以更改资源组的名称和位置。
az group create --name gridResourceGroup --location chinanorth2
启用事件网格资源提供程序
如果这是首次在 Azure 订阅中使用事件网格,则可能需要注册事件网格资源提供程序。 运行以下命令,注册提供程序:
az provider register --namespace Microsoft.EventGrid完成注册可能需要一些时间。 若要查看状态,请运行以下命令:
az provider show --namespace Microsoft.EventGrid --query "registrationState"当
registrationState为Registered后,即可继续。
创建自定义主题
事件网格主题提供用户定义的终结点,可向其发布事件。 以下示例在资源组中创建自定义主题。 将 <your-topic-name> 替换为你的主题的唯一名称。 自定义主题名称必须唯一,因为它是域名系统 (DNS) 条目的一部分。 此外,字符必须在3到50个字符之间,且仅包含数值 a-z、A-Z、0-9 和“-”
复制以下命令,指定主题名称,然后选择 回车 以执行该命令。
topicname=<your-topic-name>使用
az eventgrid topic create命令创建自定义主题。az eventgrid topic create --name $topicname -l chinanorth2 -g gridResourceGroup
创建消息终结点
在订阅自定义主题之前,创建事件消息的终结点。 通常情况下,终结点基于事件数据执行操作。 为了简化这个快速启动,可以部署一个 预构建的网页应用 ,显示事件消息。 所部署的解决方案包括应用服务计划、应用服务 Web 应用和 GitHub 中的源代码。
复制以下命令,指定网页应用名称(事件网格查看器示例),然后选择 回车 执行该命令。 将
<your-site-name>替换为 Web 应用的唯一名称。 Web 应用名称必须唯一,因为它是 DNS 条目的一部分。sitename=<your-site-name>运行
az deployment group create,使用 Azure 资源管理器 模板部署 Web 应用。az deployment group create \ --resource-group gridResourceGroup \ --template-uri "https://raw.githubusercontent.com/Azure-Samples/azure-event-grid-viewer/main/azuredeploy.json" \ --parameters siteName=$sitename hostingPlanName=viewerhost
部署可能需要几分钟时间才能完成。 部署成功后,请查看 Web 应用以确保它正在运行。 在 Web 浏览器中导航到 https://<your-site-name>.chinacloudsites.cn
你应该会看到网站上没有显示任何消息。
订阅自定义主题
订阅事件网格主题,以告知事件网格要跟踪哪些事件,以及要将这些事件发送到何处。 以下示例将订阅所创建的自定义主题,并将 Web 应用中的 URL 作为事件通知的终结点传递。
Web 应用的终结点必须包括后缀 /api/updates/。
复制以下命令,替换
$sitename为你在前一步创建的网页应用名称,然后选择 回车 键执行该命令。endpoint=https://$sitename.chinacloudsites.cn/api/updates运行以下命令以获取所创建主题的资源 ID。
topicresourceid=$(az eventgrid topic show --resource-group gridResourceGroup --name $topicname --query "id" --output tsv)运行以下命令,使用终结点创建自定义主题的订阅。
az eventgrid event-subscription create \ --source-resource-id $topicresourceid \ --name demoViewerSub \ --endpoint $endpoint再次查看 Web 应用,并注意现已向该应用发送了订阅验证事件。 选择眼睛图标以展开事件数据。 事件网格发送验证事件,以便终结点可以验证它是否想要接收事件数据。 Web 应用包含用于验证订阅的代码。
向自定义主题发送事件
让我们触发一个事件,看看事件网格如何将消息分发到终结点。 首先,获取自定义主题的URL和密钥。
endpoint=$(az eventgrid topic show --name $topicname -g gridResourceGroup --query "endpoint" --output tsv)
key=$(az eventgrid topic key list --name $topicname -g gridResourceGroup --query "key1" --output tsv)
为了简化本快速入门,请使用示例事件数据并将其发送到自定义主题。 通常,应用程序或 Azure 服务发送事件数据。 以下示例创建示例事件数据:
event='[ {"id": "'"$RANDOM"'", "eventType": "recordInserted", "subject": "myapp/vehicles/motorcycles", "eventTime": "'`date +%Y-%m-%dT%H:%M:%S%z`'", "data":{ "make": "Ducati", "model": "Monster"},"dataVersion": "1.0"} ]'
JSON 的 data 元素是事件的有效负载。 可以将任何格式正确的 JSON 置于此字段中。 也可将主题字段用于高级路由和筛选。
cURL 是一个发送 HTTP 请求的工具。 在这个快速入门中,使用 cURL 向主题发送事件。
curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint
你已触发事件,并且事件网格已将消息发送到订阅时配置的终结点。 查看 Web 应用以查看刚刚发送的事件。
[{
"id": "1807",
"eventType": "recordInserted",
"subject": "myapp/vehicles/motorcycles",
"eventTime": "2017-08-10T21:03:07+00:00",
"data": {
"make": "Ducati",
"model": "Monster"
},
"dataVersion": "1.0",
"metadataVersion": "1",
"topic": "/subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.EventGrid/topics/{topic}"
}]
清理资源
如果你打算继续使用这个活动或活动查看器应用,不要清理你在快速入门中创建的资源。 否则,请使用以下命令删除你在快速入门中创建的资源。
az group delete --name gridResourceGroup --yes --no-wait
相关内容
了解如何创建主题和事件订阅以后,即可进一步学习事件网格的功能:
想了解如何在不同编程语言中发布事件到事件网格,以及从事件网格中获取事件,请参见以下示例: