[MQTT] 通配符订阅

2022-03-29 18:59:36 浏览数 (3)

附录 A - 主题通配符

订阅可能包含特殊字符,允许您一次订阅多个主题。

主题级别分隔符用于将结构引入主题,因此可以为此目的在主题中指定。多级通配符和单级通配符可用于订阅,但消息发布者不能在主题中使用。

  • 主题级别分隔符
  • 正斜杠 (/) 用于分隔主题树中的每个级别,并为主题空间提供分层结构。当在订阅者指定的主题中遇到两个通配符时,使用主题级别分隔符非常重要。
  • 多级通配符
  • 数字符号 (#) 是与主题中任意数量的级别匹配的通配符。例如,如果您订阅了 finance/stock/ibm/#,则会收到有关以下主题的消息: finance/stock/ibm finance/stock/ibm/closingprice finance/stock/ibm/currentprice 多级通配符可以表示零个或多个级别。因此,finance/#也可以匹配单数finance,其中#表示零级别。在此上下文中,主题级别分隔符毫无意义,因为没有要分隔的级别。 多级通配符只能单独指定,也可以在主题级分隔符旁边指定。因此,#finance/#都是有效的,但finance#是无效的。多级通配符必须是主题树中使用的最后一个字符。例如,财务/#有效,但财务/#/平仓价格无效。
  • 单级通配符
  • 加号 ( ) 是仅匹配一个主题级别的通配符。例如,finance/stock/ 匹配finance/stock/ibmfinance/stock/xyz,但不能匹配 finance/stock/ibm/closeprice。此外,由于单级通配符仅匹配单个级别,因此finance/ finance不匹配。 单级通配符可以在主题树中的任何级别使用,也可以与多级通配符结合使用。它必须在主题级别分隔符旁边使用,除非它是单独指定的。因此finance/ 都是有效的,但finance 是无效的。单级通配符可以在主题树的末尾或主题树中使用。例如,finance/ finance/ /ibm都是有效的。

主题语义和用法

构建应用程序时,主题树的设计应考虑以下主题名称语法和语义原则:

  • 主题长度必须至少为一个字符。
  • 主题名称区分大小写。例如,"帐户""帐户"是两个不同的主题。
  • 主题名称可以包含空格字符。例如,应付帐款是一个有效的主题。
  • 前导"/"创建一个不同的主题。例如,/financefinance不同。/finance匹配" / "和"/ ",但不匹配" "。
  • 不要在任何主题中包含空字符(Unicode)。x0000

以下原则适用于主题树的构造和内容:

  • 长度限制为 64k,但其中主题树中的级别数没有限制。
  • 可以有任意数量的根节点;也就是说,可以有任意数量的主题树。

1 人点赞