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

Azure 事件网格的 MQTT 中转站功能中的主题空间

主题空间通过一组主题模板代表多个主题。 主题模板是支持变量以及 MQTT 通配符的 MQTT 筛选器的扩展。 每个主题空间代表同一组客户端为了进行通信而需要使用的 MQTT 主题。

主题空间可用于简化访问控制管理,因为它让你可以一次性授予对一组主题的发布或订阅访问权限,而无需管理对每个主题的访问权限。 若要发布或订阅任何 MQTT 主题,需要:

  1. 为需要通过 MQTT 通信的每个客户端创建一个客户端资源。
  2. 创建一个客户端组,其中包含需要对同一 MQTT 主题拥有发布或订阅访问权限的客户端。
  3. 创建一个主题空间,其中包含一个代表所需主题/主题筛选器的主题模板。
  4. 创建权限绑定,以向客户端组授予对主题空间的发布或订阅访问权限。

MQTT 主题筛选器:

MQTT 主题筛选器是一个 MQTT 主题,其中可以包含其一个或多个段的通配符,使其能够匹配多个 MQTT 主题。 它用于简化订阅请求,因为一个主题筛选器可以匹配多个主题。

MQTT 中转站支持 MQTT 规范定义的所有 MQTT 通配符,如下所述:

  • +:匹配单个段。
    • 例如,主题筛选器“machines/+/alert”匹配以下主题:
      • machines/temp/alert
      • machines/humidity/alert
  • #:匹配主题末尾的零个或多个段。
    • 例如,主题筛选器“machines/#”匹配以下主题:
      • machines
      • machines/temp
      • machines/humidity
      • machines/temp/alert 等

有关通配符的详细信息,请参阅 MQTT 规范中的主题通配符

主题模板

主题模板是支持变量以及 MQTT 通配符的 MQTT 筛选器的扩展。 主题空间配置还允许控制客户端组中每个客户端发布或订阅其自己的主题的授权,从而提供精细访问控制。 详细了解主题模板如何提供精细访问控制

主题空间配置:

主题空间最多可对 10 个主题模板进行分组。 主题模板支持 MQTT 通配符(+ 和 #)和以下变量:

  • ${client.authenticationName}:此变量表示客户端的身份验证名称。 详细了解客户端身份验证名称
  • ${client.attributes.x}:此变量表示在创建/更新客户端期间分配给客户端的属性,例如“x”等于属性键的确切字符串。 例如,如果客户端具有该属性,则主题模板“area/${client.attributes.area}/telemetry”仅允许客户端属性为“area:section1”的客户端在 MQTT 主题“area/section1/telemetry”上发布。 详细了解客户端属性

注意:

  • 以 $ 开头的主题仅供内部使用。

  • 变量可以表示段的一部分或整个段,但不能涵盖多个段。 例如,主题模板可以包含匹配主题“machines/machine1.factory1/temp”、“machines/machine2.factory1/temp”等的“machines/${client.authenticationName|.factory1}/temp”。

  • 主题模板使用特殊字符 $ 和 |,需要根据使用的 shell 以不同方式转义这些字符。 在 PowerShell 中,可以使用 vehicles/${dollar}telemetry/# 来转义 $。 如果使用 PowerShell,可按照以下示例所示转义这些特殊字符:

    • "vehicles/${client.authenticationName|dollar}/#"

    • vehicles/${client.authenticationName"|"dollar}/#

Azure 门户配置:

使用以下步骤创建主题空间:

  • 在 Azure 门户中转到你的命名空间。
  • 在“主题空间”下,选择“+主题空间”。
  • 为主题空间分配一个名称。

注意

  • 主题空间名称的长度可为 3-50 个字符。
  • 主题空间名称可以包含字母数字、连字符 (-),不能包含空格。
  • 选择“+添加主题模板”,至少添加一个主题模板。
  • 选择“创建”。

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

Azure CLI 配置:

使用以下命令创建主题空间:

az eventgrid namespace topic-space create -g myRG --namespace-name myNS -n myTopicSpace --topic-templates ['segment1/+/segment3/${client.authenticationName}', "segment1/${client.attributes.attribute1}/segment3/#"]

注意

传播主题空间配置更新可能需要花费几分钟时间。

后续步骤:

详细了解授权和身份验证:

快速入门:

概念: