你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本教程介绍如何使用命名空间主题将数据从 MQTT 客户端路由到 Azure 事件中心。 下面是概要步骤:
先决条件
- 如果没有 Azure 订阅,请在开始之前创建一个 Azure 免费帐户。
- 如果你不熟悉事件网格,请在开始本教程之前阅读 事件网格概述 。
- 根据 注册事件网格资源提供程序中的步骤注册事件网格资源提供程序。
- 确保在防火墙中打开端口 8883 。 本教程中的示例使用通过端口 8883 进行通信的 MQTT 协议。 某些企业和教育网络环境中可能会阻止此端口。
启动 Cloud Shell
登录到 Azure 门户。
选择链接以启动 Cloud Shell。
切换到 Bash。
创建事件网格命名空间和主题
若要在命名空间中创建事件网格命名空间和主题,请将以下脚本复制到编辑器,将占位符替换为实际值,然后运行命令。
| Placeholder | 注释 |
|---|---|
RESOURCEGROUPNAME |
指定要创建的资源组的名称。 |
EVENTGRIDNAMESPACENAME |
指定事件网格命名空间的名称。 |
REGION |
指定要在其中创建资源的位置。 |
NAMESPACETOPICNAME |
指定命名空间主题的名称。 |
rgName="RESOURCEGROUPNAME"
nsName="EVENTGRIDNAMESPACENAME"
location="REGION"
nsTopicName="NAMESPACETOPICNAME"
az group create -n $rgName -l $location
az eventgrid namespace create -g $rgName -n $nsName -l $location --topic-spaces-configuration "{state:Enabled}" --identity "{type:SystemAssigned}"
az eventgrid namespace topic create -g $rgName --name $nsTopicName --namespace-name $nsName
创建事件中心命名空间和事件中心
若要在命名空间中创建事件中心命名空间和事件中心,请将占位符替换为实际值,并运行以下命令。 此事件中心用作本教程中创建的事件订阅中的事件处理程序。
| Placeholder | 注释 |
|---|---|
EVENTHUBSNAMESPACENAME |
指定要创建的事件中心命名空间的名称。 |
EVENTHUBNAME |
指定要在事件中心命名空间中创建的事件中心实例(事件中心)的名称。 |
ehubNsName="EVENTHUBSNAMESPACENAME`"
ehubName="EVENTHUBNAME"
az eventhubs namespace create --resource-group $rgName --name $ehubNsName
az eventhubs eventhub create --resource-group $rgName --namespace-name $ehubNsName --name $ehubName
为事件网格命名空间提供将事件发送到事件中心的访问权限
运行以下命令,将事件网格命名空间的服务主体添加到事件中心命名空间上的 Azure 事件中心数据发送者角色。 它允许事件网格命名空间及其资源将事件发送到事件中心命名空间中的事件中心。
egNamespaceServicePrincipalObjectID=$(az ad sp list --display-name $nsName --query [].id -o tsv)
namespaceresourceid=$(az eventhubs namespace show -n $ehubNsName -g $rgName --query "{I:id}" -o tsv)
az role assignment create --assignee $egNamespaceServicePrincipalObjectID --role "Azure Event Hubs Data Sender" --scope $namespaceresourceid
使用事件中心作为终结点创建事件订阅
若要为之前创建的命名空间主题创建事件订阅,请将占位符替换为实际值,并运行以下命令。 此订阅配置为使用事件中心作为事件处理程序。
| Placeholder | 注释 |
|---|---|
EVENTSUBSCRIPTIONNAME |
为命名空间主题的事件订阅指定一个名称。 |
eventSubscriptionName="EVENTSUBSCRIPTIONNAME"
eventhubresourceid=$(az eventhubs eventhub show -n $ehubName --namespace-name $ehubNsName -g $rgName --query "{I:id}" -o tsv)
az resource create --api-version 2023-06-01-preview --resource-group $rgName --namespace Microsoft.EventGrid --resource-type eventsubscriptions --name $eventSubscriptionName --parent namespaces/$nsName/topics/$nsTopicName --location $location --properties "{\"deliveryConfiguration\":{\"deliveryMode\":\"Push\",\"push\":{\"maxDeliveryCount\":10,\"deliveryWithResourceIdentity\":{\"identity\":{\"type\":\"SystemAssigned\"},\"destination\":{\"endpointType\":\"EventHub\",\"properties\":{\"resourceId\":\"$eventhubresourceid\"}}}}}}"
在事件网格命名空间中配置路由
运行以下命令,在命名空间上启用路由,以将消息或事件路由到之前创建的命名空间主题。 该命名空间主题上的事件订阅将这些事件转发到配置为事件处理程序的事件中心。
routeTopicResourceId=$(az eventgrid namespace topic show -g $rgName --namespace-name $nsName -n $nsTopicName --query "{I:id}" -o tsv)
az eventgrid namespace create -g $rgName -n $nsName --topic-spaces-configuration "{state:Enabled,'routeTopicResourceId':$routeTopicResourceId}"
客户端、主题空间和权限映射
现在,创建一个客户端来发送一些用于测试的消息。 在此步骤中,你将创建一个客户端、一个包含主题的主题空间,以及发布者和订阅者绑定。
有关详细说明,请参阅 快速入门:使用 Azure CLI 在事件网格命名空间上发布和订阅 MQTT 消息。
| Placeholder | 注释 |
|---|---|
CLIENTNAME |
为发送一些测试消息的客户端指定名称。 |
CERTIFICATETHUMBPRINT |
客户端证书的指纹。 有关创建证书并提取指纹的说明,请参阅上述快速入门。 在 MQTTX 工具中使用同一指纹发送测试消息。 |
TOPICSPACENAME |
指定要创建的主题空间的名称。 |
PUBLSHERBINDINGNAME |
请为发布者绑定指定一个名称。 |
SUBSCRIBERBINDINGNAME |
指定订阅者绑定的名称。 |
clientName="CLIENTNAME"
clientAuthName="client1-authnID"
clientThumbprint="CERTIFICATETHUMBPRINT"
topicSpaceName="TOPICSPACENAME"
publisherBindingName="PUBLSHERBINDINGNAME"
subscriberBindingName="SUBSCRIBERBINDINGNAME"
az eventgrid namespace client create -g $rgName --namespace-name $nsName -n $clientName --authentication-name $clientAuthName --client-certificate-authentication "{validationScheme:ThumbprintMatch,allowed-thumbprints:[$clientThumbprint]}"
az eventgrid namespace topic-space create -g $rgName --namespace-name $nsName -n $topicSpaceName --topic-templates ['contosotopics/topic1']
az eventgrid namespace permission-binding create -g $rgName --namespace-name $nsName -n $publisherBindingName --client-group-name '$all' --permission publisher --topic-space-name $topicSpaceName
az eventgrid namespace permission-binding create -g $rgName --namespace-name $nsName -n $subscriberBindingName --client-group-name '$all' --permission subscriber --topic-space-name $topicSpaceName
使用 MQTTX 发送消息
使用 MQTTX 发送一些测试消息。 有关分步说明,请参阅快速入门: 发布和订阅 MQTT 主题。
验证事件中心是否在事件中心命名空间的 “概述 ”页上收到这些消息。
使用流分析查询在事件中心查看路由的 MQTT 消息
在 Azure 门户中,导航到事件订阅中的事件中心实例(事件中心)。 使用流分析处理来自事件中心的数据。 有关详细信息,请参阅 使用流分析处理来自 Azure 事件中心的数据 - Azure 事件中心 |Microsoft Learn。 可以在查询中看到 MQTT 消息。
后续步骤
有关代码示例,请转到 此 GitHub 存储库。