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

Azure 中继混合连接是支持的事件处理程序之一。 需要处理没有公共终结点的应用程序的事件时,可将混合连接用作事件处理程序。 这些应用程序可能位于企业网络中。 在本文中,将使用 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

  • 本文需要 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 中继命名空间进行身份验证,使教程保持简单。 建议在生产环境中使用 Microsoft Entra ID 身份验证。 使用应用程序时,可以为应用程序启用托管标识,并在中继命名空间上为标识分配适当的角色(Azure 中继所有者、Azure 中继侦听者或 Azure 中继发送方)。 有关详细信息,请参阅“使用 Microsoft Entra ID 对托管标识进行身份验证以访问 Azure 中继资源”。

向主题发送事件

让我们触发一个事件,看看事件网格如何将消息分发到终结点。 本文介绍如何使用 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

后续步骤

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