当前位置:首页 > 大杂烩 > 正文内容

MQTT主题详解

高老师4个月前 (11-27)大杂烩94

主题详解

MQTT 主题本质上是一个 UTF-8 编码的字符串,是 MQTT 协议进行消息路由的基础。MQTT 主题类似 URL 路径,使用斜杠 / 进行分层:

chat/room/1
test/10/temperature
test/+/temperature
test/#

为了避免歧义且易于理解,通常不建议主题/ 开头或结尾,例如 /chatchat/

MQTT 主题不需要提前创建。MQTT 客户端在订阅或发布时即自动的创建了主题,开发者无需再关心主题的创建,并且也不需要手动删除主题。

2.1 主题通配符

MQTT 主题通配符包含单层通配符 + 及多层通配符 #,主要用于客户端一次订阅多个主题

2.1.1 单层通配符

加号 ("+") 是用于单个主题层级匹配的通配符。在使用单层通配符时,单层通配符必须占据整个层级,例如:

+ 有效
test/+ 有效
test/+/temperature 有效
test+ 无效(没有占据整个层级)

如果客户端订阅了主题 test/+/temperature,将会收到以下主题的消息:

test/1/temperature
test/2/temperature
...
test/n/temperature

但是不会匹配以下主题:

test/temperature
test/bedroom/1/temperature

2.1.2 多层通配符

井字符号("#")是用于匹配主题中任意层级的通配符。多层通配符表示它的父级和任意数量的子层级,在使用多层通配符时,它必须占据整个层级并且必须是主题的最后

一个字符,例如:

# 有效,匹配所有主题
test/# 有效
test/bedroom# 无效(没有占据整个层级)
test/#/temperature 无效(不是主题最后一个字符)

如果客户端订阅主题  test/#,它将会收到以下主题的消息:

test
test/temperature
test/1/temperature

2.2 系统主题

$SYS/ 开头的主题为系统主题,系统主题主要用于获取 MQTT 服务器自身运行状态、消息统计、客户端上下线事件等数据。目前,MQTT 协议暂未明确规定 $SYS/

主题标准,但大多数 MQTT 服务器都遵循该标准建议


例如,EMQX 服务器支持通过以下主题获取集群状态:

主题说明
$SYS/brokersEMQX 集群节点列表
$SYS/brokers/emqx@127.0.0.1/versionEMQX 版本
$SYS/brokers/emqx@127.0.0.1/uptimeEMQX 运行时间
$SYS/brokers/emqx@127.0.0.1/datetimeEMQX 系统时间

EMQX 还支持客户端上下线事件、收发流量、消息收发、系统监控等丰富的系统主题,用户可通过订阅 $SYS/# 主题获取所有系统主题消息。

系统主题文档:https://www.emqx.io/docs/zh/v5.0/observability/mqtt-system-topics.html?__hstc=3614191.d3e87b0aa86919c8c8f01e199a29f583.1715423024096.1717117142732.1717123186833.30&__hssc=3614191.2.1717123186833&__hsfp=3042319173#%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%B8%8A%E4%B8%8B%E7%BA%BF%E4%BA%8B%E4%BB%B6


比如订阅客户端上下线事件主题:

$SYS/brokers/emqx@172.17.0.4/clients/+/connected    # 订阅客户端上线的主题
$SYS/brokers/emqx@172.17.0.4/clients/+/disconnected    # 订阅客户端下线的主题


注意:监听系统主题需要在broker端开通对应的访问权限


扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/858.html

分享给朋友:

“MQTT主题详解” 的相关文章

c#中string和StringBuilder效率对比

c#中string和StringBuilder效率对比

    c#中string和StringBuilder直接看看执行速度。(2).String类型累计赋值Test               ...

Git推送文件到远程仓库

Git推送文件到远程仓库

1.远程仓库的协作模式开发者把自己最新的版本推到线上仓库,同时把线上仓库的最新代码,拉到自己本地即可2.注册git帐号国外: http://www.github.com国内: http://git.oschina.net2.在码云创建项目,不要初始化readmegit push https://gi...

Git从远程仓库更新文件

Git从远程仓库更新文件

 git   pull  https://git.oschina.net/392223903/learn.git   master   换为您的git地址...

c#关闭计算机的代码

c#关闭计算机的代码

    1.关机Process.Start("shutdown", "-s -t 0");    2. 注销  Proc...

c#中文简体转换繁体

c#中文简体转换繁体

private const string fantizi = "高久峰是個程序員"; private const string jiantizi = "高久峰是个程序员...

IIS7.0无法加载CSS的处理办法

IIS7.0无法加载CSS的处理办法

首先网页全部是纯静态的文件,本地测试正常访问,服务器端无法加载CSS,并且无法查看CSS文件的内容。 解决方案:关闭网站的压缩->>静态压缩和动态压缩...