如何查看Mosquitto MQTT服务器上的持久客户端会话?
获取Mosquitto 2.0.17的活跃持久会话信息
针对你的需求,Mosquitto 2.0.x版本确实没有通过$SYS主题直接暴露单个持久会话的详情,但可以通过以下两种方式获取所需信息:
1. 使用自带的mosquitto_ctrl命令行工具
这是最直接的方式,Mosquitto 2.0及以上版本内置了这个管理工具,无需额外安装:
- 获取持久会话总数:
mosquitto_ctrl sessions count - 列出所有持久会话的详细信息(包括客户端ID/会话ID、活跃状态、订阅数量、最后活动时间等):
输出结果里的# 如果Broker开启了认证,需要添加用户名密码参数 mosquitto_ctrl -u <你的管理用户名> -P <你的管理密码> sessions list # 无认证的情况下直接执行 mosquitto_ctrl sessions listclientid就是你要找的会话名称,active字段标识该会话是否处于活跃状态(客户端在线)。
2. 通过$SYS主题获取会话总数
虽然$SYS没有单个会话的详情,但可以获取持久会话的总数:
- 确保Mosquitto配置文件中开启了
sys_interval(默认可能已开启,设为非0值,比如sys_interval 10表示每10秒更新一次$SYS主题) - 订阅
$SYS/broker/sessions/count主题,即可获取当前所有持久会话的数量(包括活跃和离线保留的)
注意事项
- MQTT协议中,持久会话(
cleanSession=false)与客户端ID一一绑定,所以会话名称就是客户端ID - 如果客户端离线但会话未被清理(未达到
session_expiry_interval设置的超时时间),该会话会被保留在Broker中,直到超时或客户端再次连接
内容的提问来源于stack exchange,提问作者Stefano Cucchi
相关产品推荐
相关产品推荐

