订阅#可让您订阅除$之外的所有主题的订阅
当然,最好先了解您订阅的内容,并注意某些代理配置可能会禁止明确订阅#。
您可以使用mosquitto_sub(这是mosquitto-clients包的一部分)并订阅通配符主题#:

mosquitto_sub -v -h test.mosquitto.org -p 1883 -t '#'

通配符是一个匹配主题中任意层次数的通配符。比如说,如果你订阅了finance/stock/ibm/#,你就可以接收到以下这些主题的消息。
finance/stock/ibm
finance/stock/ibm/closingprice
finance/stock/ibm/currentprice
多层通配符有可以表示大于等于0的层次。因此,finance/#也可以匹配到单独的finance,在这种情况下#代表0层。在这种语境下主题层次分隔符/就没有意义了。因为没有可以分的层次。

多层通配符只可以确定当前层或者下一层。因此,#和finance/#都是有效的,但是finance#不是有效的。多层通配符一定要是主题树的最后一个字符。比如说,finance/#是有效的,但是finance/#/closingprice是无效的。

通配符+只匹配主题的一层。比如说,finance/stock/+匹配finance/stock/ibm和finance/stock/xyz,但是不匹配finance/stock/ibm/closingprice。另外,因为单层通配符只匹配1层,finance/+不匹配finance。
单层通配符可以被用于主题树的任意层级,连带多层通配符。它必须被用在主题层级分隔符/的右边,除非它是指定自己。因此,+和finance/+都是有效的,但是finance+无效。单层通配符可以用在主题树的末端,也可以用在中间。比如说,finance/+和finance/+/ibm都是有效的。

topic定义约束
topic至少有一个字符。
topic名字是大小写敏感的。比如说,ACCOUNTS和Accounts是两个不同的主题。
topic名字可以包含空格。比如,Accounts payable是一个有效的主题。
以/开头会产生一个不同的主题。比如说,/finnace与finance不同。/finance匹配"+/+"和/+,但不匹配+
不要在任何主题中包含null(Unicode x0000)字符。
topic树中,长度不能超过64k,层数不限。

本文链接地址:https://const.net.cn/153.html

标签: mqtt

添加新评论