你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
快速入门:使用 Azure 门户在事件网格命名空间上发布和订阅 MQTT 消息
在本快速入门中,你将使用 Azure 门户创建启用了 MQTT 代理的事件网格命名空间,创建客户端、客户端组和主题空间等子资源,授予客户端发布和订阅主题空间的权限,然后在客户端之间发布和接收消息。
先决条件
- 如果没有 Azure 订阅,可创建一个 Azure 免费帐户。
- 如果不熟悉 Azure 事件网格,请在开始本教程之前通读事件网格概述。
- 确保已在防火墙中打开端口 8883。 本教程中的示例使用 MQTT 协议,该协议通过端口 8883 进行通信。 在某些公司和教育网络环境中,此端口可能被阻止。
- 需要使用一个 X.509 客户端证书生成指纹并对客户端连接进行身份验证。
生成示例客户端证书和指纹
如果你没有证书,可以使用 Step CLI 创建一个示例证书。 考虑手动安装适用于 Windows 的版本。
成功安装 Step 后,应在用户配置文件文件夹 (Win+R type %USERPROFILE%) 中打开命令提示符。
要创建根证书和中间证书,请运行以下命令。 请记住密码,需要在下一步中使用它。
step ca init --deployment-type standalone --name MqttAppSamplesCA --dns localhost --address 127.0.0.1:443 --provisioner MqttAppSamplesCAProvisioner
使用生成的 CA 文件为第一个客户端创建证书。 确保在命令中使用正确的证书和机密文件路径。
step certificate create client1-authn-ID client1-authn-ID.pem client1-authn-ID.key --ca .step/certs/intermediate_ca.crt --ca-key .step/secrets/intermediate_ca_key --no-password --insecure --not-after 2400h
若要查看指纹,请运行 Step 命令。
step certificate fingerprint client1-authn-ID.pem
现在,为第二个客户端创建证书。
step certificate create client2-authn-ID client2-authn-ID.pem client2-authn-ID.key --ca .step/certs/intermediate_ca.crt --ca-key .step/secrets/intermediate_ca_key --no-password --insecure --not-after 2400h
若要查看第二个客户端使用的指纹,请运行 Step 命令。
step certificate fingerprint client2-authn-ID.pem
创建命名空间
登录到 Azure 门户。
在搜索栏中键入“事件网格命名空间”,然后从下拉列表中选择“事件网格命名空间”。
在“事件网格命名空间”页上的工具栏中选择“+ 创建”。
在“创建命名空间”页上执行以下步骤:
选择 Azure 订阅。
选择现有的资源组,或者选择“新建”并输入资源组的名称。
为命名空间提供唯一名称。 命名空间名称在每个区域中必须唯一,因为它代表一个 DNS 条目。 请不要使用图中所示的名称。 而是创建自己的名称 - 它必须介于 3 到 50 个字符之间,并且只包含值 a-z、A-Z、0-9 和
-
。为事件网格命名空间选择一个位置。 目前,事件网格命名空间仅在选定的区域可用。
在页面底部选择“查看 + 创建”。
在“创建命名空间”页的“查看 + 创建”选项卡上,选择“创建”。
注意
为了简化过程,本快速入门只使用“基本信息”页来创建命名空间。 有关在向导的其他页上配置网络、安全性和其他设置的详细步骤,请参阅创建命名空间。
部署成功后,选择“转到资源”以导航到命名空间的“事件网格命名空间概述”页。
在“概述”页中,可以看到 MQTT 代理处于“已禁用”状态。 若要启用 MQTT 代理,请选择“已禁用”链接,随即你会重定向到“配置”页。
在“配置”页上,选择“启用 MQTT 代理”选项,然后选择“应用”以应用设置。
创建客户端
在左侧菜单中,选择“MQTT 代理”部分中的“客户端”。
在“客户端”页上的工具栏中选择“+ 客户端”。
在“创建客户端”页上,输入客户端的“名称”。 客户端名称在命名空间中必须唯一。
客户端身份验证名称默认为客户端名称。 对于本教程,请将其更改为
client1-authn-ID
。 需要将此名称作为Username
包含在 CONNECT 数据包中。本教程使用基于指纹的身份验证。 在“主指纹”中包含第一个客户端证书的指纹。
选择工具栏上的“创建”以创建另一个客户端。
重复上述步骤以创建名为
client2
的第二个客户端。 将身份验证名称更改为client2-authn-ID
,并在“主指纹”中包含第二个客户端证书的指纹。注意
- 为了简化过程,本快速入门将使用“指纹匹配”进行身份验证。 有关使用 X.509 CA 证书链进行客户端身份验证的详细步骤,请参阅使用证书链进行客户端身份验证。
- 此外,我们将使用默认的
$all
客户端组,其中包含本练习的命名空间中的所有客户端。 若要详细了解如何使用客户端属性创建自定义客户端组,请参阅“客户端组”。
创建主题空间
在左侧菜单中,选择“MQTT 代理”部分中的“主题空间”。
在“主题空间”页上的工具栏中选择“+ 主题空间”。
在“创建主题空间”页上提供主题空间的“名称”。
输入主题模板的
contosotopics/topic1
,然后选择“创建”以创建主题空间。
使用权限绑定配置访问控制
在左侧菜单中,选择“MQTT 代理”部分中的“权限绑定”。
在“权限绑定”页上的工具栏中选择“+ 权限绑定”。
如下所述配置权限绑定:
为权限绑定提供“名称”。 例如
contosopublisherbinding
。对于“客户端组名称”,请选择“$all”。
对于“主题空间名称”,请选择在上一步中创建的主题空间。
向客户端组授予对主题空间的“发布者”权限。
选择“创建”以创建权限绑定。
在工具栏上选择“+ 权限绑定”,以便再创建一个权限绑定 (
contososubscriberbinding
)。提供一个名称,并授予 $all 客户端组对 ContosoTopicSpace 的“订阅者”访问权限,如图所示。
选择“创建”以创建权限绑定。
使用 MQTTX 应用将客户端连接到 EG 命名空间
对于发布/订阅 MQTT 消息,可以使用你偏好的任何工具。 出于演示目的,此处使用 MQTTX 应用(可从 https://mqttx.app/ 下载)显示发布/订阅。
在左侧导航栏上选择“+”。
使用以下设置配置 client1
“名称”为
client1
(此值可以是任意值)“客户端 ID”为
client1-session1
(CONNECT 数据包中的客户端 ID 用于标识客户端连接的会话 ID)“用户名”为
client1-authn-ID
。 此值必须与在 Azure 门户中创建客户端时指定的“客户端身份验证名称”的值匹配。重要
用户名必须与客户端元数据中的客户端身份验证名称匹配。
在命名空间的“概述”页中将主机名更新为 MQTT 主机名。
将“端口”更新为 8883。
将 SSL/TLS 切换为“打开”。
将 SSL Secure 切换为“打开”,以确保服务证书验证。
选择“证书”作为“CA 或自签名证书”。
提供客户端证书文件的路径。
提供客户端密钥文件的路径。
其余设置可以保留预定义的默认值。
选择“连接”,将客户端连接到 MQTT 中转站。
重复上述步骤,使用相应的身份验证信息连接第二个客户端“client2”,如图所示。
使用 MQTTX 应用发布/订阅
连接客户端后,对于 client2,请选择“+ 新建订阅”按钮。
添加
contosotopics/topic1
作为主题,然后选择“确认”。 其他字段可以保留现有的默认值。在左侧栏中选择“client1”。
对于 client1,在消息撰写框的顶部,输入
contosotopics/topic1
作为要发布的主题。撰写消息。 可以使用任何格式或 JSON,如下所示。
选择“发送”按钮 。
该消息应在 client1 中显示为“已发布”。
切换到 client2。 确认 client2 已收到消息。