调试与运维
口诀:先连通,再鉴权,再订阅匹配,最后才看业务 Payload
工具:mosquitto_pub/sub、Broker 日志、Wireshark、应用 Reason Code(MQTT5)
1. 最小连通性检查
1 2 3 4 5
| mosquitto_sub -h 127.0.0.1 -p 1883 -t 'debug/#' -v
mosquitto_pub -h 127.0.0.1 -p 1883 -t 'debug/ping' -m 'pong' -q 1
|
TLS 示例:
1 2
| mosquitto_sub -h broker.example -p 8883 \ --cafile ca.crt -t 'debug/#' -v
|
2. 分层排障
L0 网络
| 现象 |
检查 |
| 连不上 |
端口、防火墙、DNS、容器网络 |
| TLS 握手失败 |
证书链、时间、SNI、TLS 版本 |
L1 协议会话
| 现象 |
检查 |
| CONNACK 拒绝 |
用户名密码、Client ID 冲突、协议版本 |
| 频繁掉线 |
Keep Alive、NAT 超时、心跳 |
| 互相踢下线 |
重复 Client ID |
L2 路由
| 现象 |
检查 |
| 发布成功但收不到 |
Topic 拼写、通配符、ACL 拒绝订阅 |
| 只有新订阅有数据 |
是否依赖 Retain;发布端是否置 Retain |
| 共享订阅不均衡 |
Broker 是否支持、ShareName 是否一致 |
L3 应用
| 现象 |
检查 |
| 偶发重复 |
QoS1 重传 → 幂等 |
| JSON 解析失败 |
编码、截断、最大包长 |
| 桥接延迟大 |
慢消费者、队列堆积、无节流 |
3. Broker 侧观察
- Mosquitto:日志级别、
$SYS/#(若启用)
- EMQX / HiveMQ:Dashboard / 指标 / 慢订阅监控
关注:
- 当前连接数
- 每秒消息数
- 堆叠的未确认 QoS 消息
- ACL 拒绝计数
4. 抓包
- Wireshark:过滤
mqtt 或 tcp.port==1883
- TLS 场景需密钥或改在 Broker 侧打明文日志(注意隐私)
MQTT5:优先读 Reason Code 与 DISCONNECT 原因,少靠猜。
5. 运维 Checklist
6. 本地开源项目入口
| 目的 |
目录 |
| 轻量 Broker |
../开源项目/mosquitto |
| 边缘 Broker |
../开源项目/nanomq |
| 大规模 Broker |
../开源项目/emqx、hivemq-community-edition |
| Python 客户端 |
../开源项目/paho.mqtt.python |
| C 客户端 |
../开源项目/paho.mqtt.c |
| JS 客户端 |
../开源项目/MQTT.js |
| ROS 2 桥 |
../开源项目/ros2_mqtt_client |
下一篇:09-规范与资料索引.md
正在加载留言…