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

快速入门:使用 Azure 门户在事件网格命名空间上发布和订阅 MQTT 消息

在本文中,你将使用 Azure 门户执行以下任务:

  1. 创建事件网格命名空间并启用 MQTT 代理
  2. 创建子资源,例如客户端、客户端组和主题空间
  3. 为客户端授予发布和订阅主题空间的访问权限
  4. 在客户端之间发布和接收消息

先决条件

  • 如果没有 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. 在搜索栏中键入“事件网格命名空间”,然后从下拉列表中选择“事件网格命名空间”。

    Screenshot of searching for Event Grid namespace on Azure portal.

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

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

    1. 选择 Azure 订阅。

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

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

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

      Screenshot showing Event Grid namespace create flow basics tab.

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

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

    注意

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

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

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

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

    Screenshot showing Event Grid namespace configuration page to enable MQTT.

创建客户端

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

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

    Screenshot of the Clients page with Add button selected.

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

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

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

    Screenshot of client 1 configuration.

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

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

    Screenshot of client 2 configuration.

    注意

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

创建主题空间

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

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

    Screenshot of Topic spaces page with create button selected.

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

  4. 选择“+ 添加主题模板”

    Screenshot of Create topic space with the name.

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

    Screenshot of topic space configuration.

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

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

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

    Screenshot that shows the Permission bindings page with the Create button selected.

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

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

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

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

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

      Screenshot showing creation of first permission binding.

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

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

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

    Screenshot showing creation of second permission binding.

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

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

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

    Screenshot showing MQTTX app left rail to add new client.

  2. 使用以下设置配置 client1

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

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

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

      重要

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

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

    Screenshot showing Event Grid namespace overview page, which has MQTT hostname.

  4. 将“端口”更新为 8883

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

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

  7. 为“证书”选择“自签名”

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

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

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

    Screenshot showing client 1 configuration part 1 on MQTTX app.

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

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

    Screenshot showing client 2 configuration part 1 on MQTTX app.

    Screenshot showing client 2 configuration part 2 on MQTTX app.

使用 MQTTX 应用发布/订阅

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

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

    Screenshot showing subscription topic configuration on MQTTX app.

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

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

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

  6. 选择“发送”按钮 。

    Screenshot showing message publishing on the topic in MQTTX app.

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

    Screenshot showing message published on the topic in MQTTX app.

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

    Screenshot showing the message received by the subscribing client on MQTTX app.

后续步骤