你当前正在访问 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%) 中打开命令提示符。

  1. 要创建根证书和中间证书,请运行以下命令。 请记住密码,需要在下一步中使用它。

    step ca init --deployment-type standalone --name MqttAppSamplesCA --dns localhost --address 127.0.0.1:443 --provisioner MqttAppSamplesCAProvisioner
    
  2. 使用生成的 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
    
  3. 若要查看指纹,请运行 Step 命令。

    step certificate fingerprint client1-authn-ID.pem
    
  4. 现在,为第二个客户端创建证书。

    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
    
  5. 若要查看第二个客户端使用的指纹,请运行 Step 命令。

    step certificate fingerprint client2-authn-ID.pem
    

创建命名空间

  1. 登录到 Azure 门户

  2. 在搜索栏中键入“事件网格命名空间”,然后从下拉列表中选择“事件网格命名空间”。

    在 Azure 门户上搜索事件网格命名空间的屏幕截图。

  3. 在“事件网格命名空间”页上的工具栏中选择“+ 创建”。

  4. 在“创建命名空间”页上执行以下步骤:

    1. 选择 Azure 订阅。

    2. 选择现有的资源组,或者选择“新建”并输入资源组的名称。

    3. 为命名空间提供唯一名称。 命名空间名称在每个区域中必须唯一,因为它代表一个 DNS 条目。 请不要使用图中所示的名称。 而是创建自己的名称 - 它必须介于 3 到 50 个字符之间,并且只包含值 a-z、A-Z、0-9 和 -

    4. 为事件网格命名空间选择一个位置。 目前,事件网格命名空间仅在选定的区域可用。

      显示事件网格命名空间创建流基本信息选项卡的屏幕截图。

  5. 在页面底部选择“查看 + 创建”。

  6. 在“创建命名空间”页的“查看 + 创建”选项卡上,选择“创建”

    注意

    为了简化过程,本快速入门只使用“基本信息”页来创建命名空间。 有关在向导的其他页上配置网络、安全性和其他设置的详细步骤,请参阅创建命名空间

  7. 部署成功后,选择“转到资源”以导航到命名空间的“事件网格命名空间概述”页。

  8. 在“概述”页中,可以看到 MQTT 代理处于“已禁用”状态。 若要启用 MQTT 代理,请选择“已禁用”链接,随即你会重定向到“配置”页。

  9. 在“配置”页上,选择“启用 MQTT 代理”选项,然后选择“应用”以应用设置。

    显示用于启用 MQTT 的事件网格命名空间配置页的屏幕截图。

创建客户端

  1. 在左侧菜单中,选择“MQTT 代理”部分中的“客户端”。

  2. 在“客户端”页上的工具栏中选择“+ 客户端”

    “客户端”页的屏幕截图,其中选择了“添加”按钮。

  3. 在“创建客户端”页上,输入客户端的“名称”。 客户端名称在命名空间中必须唯一。

  4. 客户端身份验证名称默认为客户端名称。 对于本教程,请将其更改为 client1-authn-ID。 需要将此名称作为 Username 包含在 CONNECT 数据包中。

  5. 本教程使用基于指纹的身份验证。 在“主指纹”中包含第一个客户端证书的指纹

    客户端 1 的配置的屏幕截图。

  6. 选择工具栏上的“创建”以创建另一个客户端

  7. 重复上述步骤以创建名为 client2 的第二个客户端。 将身份验证名称更改为 client2-authn-ID,并在“主指纹”中包含第二个客户端证书的指纹

    客户端 2 的配置的屏幕截图。

    注意

    • 为了简化过程,本快速入门将使用“指纹匹配”进行身份验证。 有关使用 X.509 CA 证书链进行客户端身份验证的详细步骤,请参阅使用证书链进行客户端身份验证
    • 此外,我们将使用默认的 $all 客户端组,其中包含本练习的命名空间中的所有客户端。 若要详细了解如何使用客户端属性创建自定义客户端组,请参阅“客户端组”。

创建主题空间

  1. 在左侧菜单中,选择“MQTT 代理”部分中的“主题空间”。

  2. 在“主题空间”页上的工具栏中选择“+ 主题空间”

    “主题空间”页的屏幕截图,其中选择了“创建”按钮。

  3. 在“创建主题空间”页上提供主题空间的“名称”

    创建主题空间的屏幕截图,其中显示了名称。

  4. 输入主题模板的 contosotopics/topic1,然后选择“创建”以创建主题空间

    主题空间配置的屏幕截图。

使用权限绑定配置访问控制

  1. 在左侧菜单中,选择“MQTT 代理”部分中的“权限绑定”。

  2. 在“权限绑定”页上的工具栏中选择“+ 权限绑定”。

    显示“权限绑定”页的屏幕截图,其中选择了“创建”按钮。

  3. 如下所述配置权限绑定:

    1. 为权限绑定提供“名称”。 例如 contosopublisherbinding

    2. 对于“客户端组名称”,请选择“$all”

    3. 对于“主题空间名称”,请选择在上一步中创建的主题空间

    4. 向客户端组授予对主题空间的“发布者”权限

      显示创建第一个权限绑定的屏幕截图。

  4. 选择“创建”以创建权限绑定。

  5. 在工具栏上选择“+ 权限绑定”,以便再创建一个权限绑定 (contososubscriberbinding)

  6. 提供一个名称,并授予 $all 客户端组对 ContosoTopicSpace 的“订阅者”访问权限,如图所示

    显示创建第二个权限绑定的屏幕截图。

  7. 选择“创建”以创建权限绑定。

使用 MQTTX 应用将客户端连接到 EG 命名空间

  1. 对于发布/订阅 MQTT 消息,可以使用你偏好的任何工具。 出于演示目的,此处使用 MQTTX 应用(可从 https://mqttx.app/ 下载)显示发布/订阅。

  2. 在左侧导航栏上选择“+”。

  3. 使用以下设置配置 client1

    • “名称”为 client1(此值可以是任意值)

    • “客户端 ID”为 client1-session1(CONNECT 数据包中的客户端 ID 用于标识客户端连接的会话 ID)

    • “用户名”为 client1-authn-ID。 此值必须与在 Azure 门户中创建客户端时指定的“客户端身份验证名称”的值匹配

      重要

      用户名必须与客户端元数据中的客户端身份验证名称匹配。

  4. 在命名空间的“概述”页中将主机名更新为 MQTT 主机名。

    显示包含 MQTT 主机名的事件网格命名空间概述页的屏幕截图。

  5. 将“端口”更新为 8883

  6. 将 SSL/TLS 切换为“打开”

  7. 将 SSL Secure 切换为“打开”,以确保服务证书验证

  8. 选择“证书”作为“CA 或自签名证书”。

  9. 提供客户端证书文件的路径。

  10. 提供客户端密钥文件的路径。

  11. 其余设置可以保留预定义的默认值。

    显示 MQTTX 应用中客户端 1 配置第 1 部分的屏幕截图。

  12. 选择“连接”,将客户端连接到 MQTT 中转站

  13. 重复上述步骤,使用相应的身份验证信息连接第二个客户端“client2”,如图所示

    显示 MQTTX 应用中客户端 2 配置第 1 部分的屏幕截图。

    显示 MQTTX 应用中客户端 2 配置第 2 部分的屏幕截图。

使用 MQTTX 应用发布/订阅

  1. 连接客户端后,对于 client2,请选择“+ 新建订阅”按钮

  2. 添加 contosotopics/topic1 作为主题,然后选择“确认”。 其他字段可以保留现有的默认值。

    显示 MQTTX 应用中的订阅主题配置的屏幕截图。

  3. 在左侧栏中选择“client1”

  4. 对于 client1,在消息撰写框的顶部,输入 contosotopics/topic1 作为要发布的主题。

  5. 撰写消息。 可以使用任何格式或 JSON,如下所示。

  6. 选择“发送”按钮 。

    显示正在 MQTTX 应用中的主题上发布消息的屏幕截图。

  7. 该消息应在 client1 中显示为“已发布”。

    显示已在 MQTTX 应用中的主题上发布消息的屏幕截图。

  8. 切换到 client2。 确认 client2 已收到消息。

    显示 MQTTX 应用中的订阅客户端已接收消息的屏幕截图。