Loading

MQTT:主题和主题通配符

一、主题

MQTT的消息是以主题进行分类的,主题可以使用单级主题和多级主题,多级主题的标志是用/分隔的。例如:单级主题 sensor ,多级主题 sensor/temperaturesensor/temperature/room1

在客户端向主题发布或者订阅消息之前,无需去创建主题。

主题使用建议:

  • 绝不使用斜杆开头的主题名,例如:/myhome/groundfloor/livingroom

  • 绝不在主题名中使用空格

  • 保持主题名短小和简洁

  • 仅使用ASCII码,避免使用ASCII码中的非打印字符

二、主题通配符

客户端可以对于具体的主题进行订阅,但某一类主题全部进行订阅,此时需要通配符来解决了。MQTT中给出了两种通配符:单级通配符(+)和多级通配符(#)

📌 注意:主题通配符仅能用来订阅,不能用作发布

  • 单级通配符(+)

例如:想订阅所有房间的温度传感器的温度消息,对于所有房间的房间号是不能提前预知的,但是可以通过单级通配符搞定所有房间号。

  • 多级通配符(#)

例如:想订阅房间号room1的所有不同传感器的消息,对于所有不同传感器的类型是不能提前预知的,但是可以通过多级通配符搞定不同类型传感器名称。

📌 注意:多级通配符只能放在最后一级

三、+ 和 # 混合

设想一个问题:如果我想房子(home)订阅一楼(floor1)所有房间的硬件传感器设备(sensorDevice)下的所有传感器,应该如何定义这个主题呢?

分析:所有房间、所有硬件传感器,肯定不能使用两个多级通配符#,那么就可以+ 和 # 混用。

主题:home/floor1/+/sensorDevice/#

当然,可能有人会想到一种取巧的办法,既然要订阅很多未知的主题,直接订阅主题:#,可以使用所有的主题。确实可行,但这会牺牲主机的性能,订阅了很多没有用的主题。

posted @ 2023-12-28 11:08  eiSouthBoy  阅读(1447)  评论(0)    收藏  举报