2018-11-06-mqtt-mosquitto系列02之主题和系统主题

Posted 林兴洋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018-11-06-mqtt-mosquitto系列02之主题和系统主题相关的知识,希望对你有一定的参考价值。

mosquitto

mosquitto是订阅发布类型的服务器,不同客户端可以往特定主题上发送消息,然后订阅该主题的所有客户端将收到该消息,为此我们需要了解一些mosquitto主题的相关知识。

基本订阅

如下就是最基本的订阅主题例子,例子中客户端订阅了主题device001

# mosquitto_sub -t "device001"

如下是发布一条消息"hello zhang san"到主题device001,所有订阅主题device001的客户端将收到该消息。(当然消息不是直接从一个客户端直接传递到另一个客户端,而是经过mosquitto服务器,mosquitto服务端接收到客户端的发布到主题device001的消息,复制消息副本发送给所有订阅主题device001的客户端)。

# mosquitto_pub -t "device001" -m "hello zhang san"

分层

主题存在分层概念(可以理解为文件/文件夹路径一样,有层级),如下:

# mosquitto_sub -t "wecon/vbox/device001"

通配符

有时候我们需要大批量订阅某些主题,总不能傻傻的一个个订阅,为了客户端能够订阅指定的一些主题,mosquitto支持两种通配符

  • (+)通配一层
  • (#)通配所有

需要注意一下几点

  • 后面讲到的系统主题,$SYS 不会被 #匹配到,如果想要观察整个$SYS,使用 $SYS/#
  • 通配符只能单独使用,因此订阅a/b+/c不能有效地使用通配符,单独使用即占单独的一层,就是两个反斜杠的中间或者末尾,如下
a/b+/c          不能通配,错误
a/+/c/d         通配订阅, a/任意主题/c/d
a/+/c/+         通配订阅,a/任意主题/c/d
a/b/c/+         通配订阅
a/b/c/d         普通订阅
a/whatever/c/d  普通订阅
  • # 通配符只能用作订阅的最后一个字符,表示通配后面所有。
如 a/# 可以通配
a/b/c/d
a/whatever

例子

订阅所有的话题

# mosquitto_sub -h test.mosquitto.org -t "#"

订阅所有的$SYS主题

# mosquitto_sub -t "\\$SYS/broker/#"

订阅所有以’lxy/'开头的话题

# mosquitto_sub -h test.mosquitto.org -t "lxy/#"
helloA
helloC
helloWhatever

发送消息,可以看到,上面收到了哪些。

# mosquitto_pub -h test.mosquitto.org -t "lxy/A" -m "helloA"  
# mosquitto_pub -h test.mosquitto.org -t "lxyB" -m "helloB"  
# mosquitto_pub -h test.mosquitto.org -t "lxy/CCCCC" -m "helloC" 
# mosquitto_pub -h test.mosquitto.org -t "lxy/whatever" -m "helloWhatever"

系统主题

这里需要特别介绍的是系统主题,对于MQTT管理员来说,可以通过系统主题检查当前MQTT服务器的一些状态情况。

关于转义

在linux系统中,$SYS/... 会被认为是环境变量,所以需要加一个反斜杠来转义 ,例:\\$SYS/...

bytes

$SYS/broker/bytes/received 启动后接收的字节数

查看自启动后,mosquitto收到的总字节数

# mosquitto_sub -h test.mosquitto.org -t "\\$SYS/broker/bytes/received"
216753582
216885620
217015805

$SYS/broker/bytes/sent 启动后的发送字节数

clients 关于客户端的一些信息

$SYS/broker/clients/connected 当前连接数

$SYS/broker/clients/disconnected 当前断开连接数

$SYS/broker/clients/expired 超时移除用户数

根据persistent_client_expiration 设置的超时时间被移除的用户

$SYS/broker/clients/maximum 历史上同时连接过最大数客户端数量

$SYS/broker/clients/total 所有活跃或者不活跃的用户

$SYS/broker/connection/#

堆空间

$SYS/broker/heap/current size 当前使用的堆空间

mosquitto使用的堆空间,注意该项是根据编译时选项决定,所以可能不可用

$SYS/broker/heap/maximum size 最大使用的堆空间

同上

负载相关

$SYS/broker/load/connections/+ 每分钟收到的包数

不同时间间隔计算出来的每分钟收到的包数,1分钟,5分钟和15分钟。

# mosquitto_sub -h test.mosquitto.org -t "\\$SYS/broker/load/connections/+"
1689.45 // 分别代表1分钟收到的包数
1700.82 // 5分钟收到的包数/5
1716.97 // 15分钟收到的包数/15

$SYS/broker/load/bytes/received/+ 每分钟收到的byte数

也是以1,5,15分钟作为时间间隔

# mosquitto_sub -h test.mosquitto.org -t "\\$SYS/broker/load/bytes/received/+"
704272.68
704121.33
708344.36

$SYS/broker/load/bytes/sent/+ 每分钟发送的字节数

同上

$SYS/broker/load/messages/received/+ 每分钟的接收 MQTT消息数量

# mosquitto_sub -h test.mosquitto.org -t "\\$SYS/broker/load/messages/received/+"
10797.11
10786.62
10831.87

$SYS/broker/load/messages/sent/+ 每分钟的发送 MQTT消息数量

同上

$SYS/broker/load/publish/received/+ 每分钟收到的发布消息

$SYS/broker/load/publish/sent/+ 每分钟发送的发布消息

# mosquitto_sub -h test.mosquitto.org -t "\\$SYS/broker/load/publish/received/+"
3364.83
3273.47
3274.06

$SYS/broker/load/sockets/+ 连接的socket数量

# mosquitto_sub -h test.mosquitto.org -t "\\$SYS/broker/load/sockets/+"
1973.11
1973.11
1979.76

message 消息相关

$SYS/broker/messages/inflight

QoS>0并且在等待确认的消息数量

$SYS/broker/messages/received 启动后发送的消息数量

$SYS/broker/messages/sent 启动后收到的消息数量

$SYS/broker/publish/messages/dropped 丢弃的消息数

因为 inflight/queuing limits而抛弃的消息数量

inflight : 等待中

queuing limits:队列上限

查看配置文件中 max_inflight_message 和 max_queued_messages两项

$SYS/broker/publish/messages/received 接收的publish消息数量

$SYS/broker/publish/messages/sent 发送的publish消息数量

$SYS/broker/retained messages/count 保留的消息数量

$SYS/broker/store/messages/count 当前存储的消息的数量

包括: 保留的消息和消息队列中排队的消息

其它

$SYS/broker/subscriptions/count 活跃的订阅者数量

$SYS/broker/version 查看版本

root@ubuntu:~# mosquitto_sub -h test.mosquitto.org -t "\\$SYS/broker/version"
mosquitto version 1.5.3

推荐的软件

这里推荐一款软件 MQTT Explorer,不错,可以方便的来订阅主题,搜一下就有。

参考

以上是关于2018-11-06-mqtt-mosquitto系列02之主题和系统主题的主要内容,如果未能解决你的问题,请参考以下文章

2018-11-06-mqtt-mosquitto系列02之主题和系统主题