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

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

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

注意

如果你是 Azure 事件网格的新用户,请参阅什么是 Azure 事件网格,先大致了解该服务,然后再完成本教程。

先决条件

  • 本文需要 Azure CLI 版本 2.0.56 或更高版本。 如果使用 Azure Cloud Shell,则最新版本已安装。

创建资源组

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

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

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

az group create --name gridResourceGroup --location westus2

创建自定义主题

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

az eventgrid topic create --name <topic_name> -l westus2 -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# 的 Microsoft 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

后续步骤

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