教程:使用 Azure CLI 和事件网格将自定义事件路由到 Azure 中继混合连接

Azure 事件网格是针对云的事件处理服务。 Azure 中继混合连接是支持的事件处理程序之一。 需要处理没有公共终结点的应用程序的事件时,可将混合连接用作事件处理程序。 这些应用程序可能位于企业网络中。 在本文中,将使用 Azure CLI 创建一个自定义主题,然后订阅该自定义主题,再触发可查看结果的事件。 将事件发送到混合连接。

先决条件

  • 如需在本地运行 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

  • 本文需要 Azure CLI 版本 2.0.56 或更高版本。

创建资源组

事件网格主题是 Azure 资源,必须放置在 Azure 资源组中。 该资源组是在其中部署和管理 Azure 资源的逻辑集合。

使用“az group create”命令创建资源组。

以下示例在“chinanorth2”位置创建名为“gridResourceGroup”的资源组。

az group create --name gridResourceGroup --location chinanorth2

创建自定义主题

事件网格主题提供用户定义的终结点,可向其发布事件。 以下示例在资源组中创建自定义主题。 将 <topic_name> 替换为自定义主题的唯一名称。 事件网格主题名称必须唯一,因为它由 DNS 条目表示。

az eventgrid topic create --name <topic_name> -l chinanorth2 -g gridResourceGroup

订阅自定义主题

订阅事件网格主题是为了告知事件网格要跟踪哪些事件。以下示例订阅所创建的自定义主题,并传递终结点混合连接的资源 ID。 混合连接 ID 采用以下格式:

/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Relay/namespaces/<relay-namespace>/hybridConnections/<hybrid-connection-name>

以下脚本获取中继命名空间的资源 ID。 它构造混合连接的 ID 并订阅事件网格主题。 该脚本将终结点类型设置为 hybridconnection 并使用终结点的混合连接 ID。

relaynsname=<namespace-name>
relayrg=<resource-group-for-relay>
hybridname=<hybrid-name>

relayid=$(az relay namespace show --resource-group $relayrg --name $relaynsname --query id --output tsv)
hybridid="$relayid/hybridConnections/$hybridname"
topicid=$(az eventgrid topic show --name <topic_name> -g gridResourceGroup --query id --output tsv)

az eventgrid event-subscription create \
  --source-resource-id $topicid \
  --name <event_subscription_name> \
  --endpoint-type hybridconnection \
  --endpoint $hybridid \
  --expiration-date "<yyyy-mm-dd>"

请注意为订阅设置到期日期

创建应用程序以处理事件

需要一个可以从混合连接检索事件的应用程序。 适用于 C# 的 Azure 事件网格混合连接使用者示例执行该操作。 已完成先决条件步骤。

  1. 确保具有 Visual Studio 2019 或更高版本。

  2. 将存储库克隆到本地计算机。

  3. 在 Visual Studio 中加载 HybridConnectionConsumer 项目。

  4. 在 Program.cs 中,将 <relayConnectionString><hybridConnectionName> 替换为创建的中继连接字符串和混合连接名称。

  5. 在 Visual Studio 中编译并运行应用程序。

向主题发送事件

让我们触发一个事件,看看事件网格如何将消息分发到终结点。 本文介绍如何使用 Azure CLI 来触发事件。 或者,可以使用事件网格发布者应用程序

首先,让我们获取自定义主题的 URL 和密钥。 同样,请将自定义主题名称用于 <topic_name>

endpoint=$(az eventgrid topic show --name <topic_name> -g gridResourceGroup --query "endpoint" --output tsv)
key=$(az eventgrid topic key list --name <topic_name> -g gridResourceGroup --query "key1" --output tsv)

为简化本文,将使用要发送到自定义主题的示例事件数据。 通常情况下,应用程序或 Azure 服务会发送事件数据。 CURL 是发送 HTTP 请求的实用工具。 本文使用 CURL 向自定义主题发送事件。

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"} ]'
curl -X POST -H "aeg-sas-key: $key" -d "$event" $endpoint

侦听器应用程序应接收事件消息。

清理资源

如果打算继续处理此事件,请不要清除本文中创建的资源。 否则,请使用以下命令删除本文中创建的资源。

az group delete --name gridResourceGroup

后续步骤

了解如何创建主题和事件订阅以后,即可进一步学习事件网格的功能: