调试与运维

调试与运维

口诀:先连通,再鉴权,再订阅匹配,最后才看业务 Payload
工具:mosquitto_pub/sub、Broker 日志、Wireshark、应用 Reason Code(MQTT5)


1. 最小连通性检查

1
2
3
4
5
# 终端 A:订阅
mosquitto_sub -h 127.0.0.1 -p 1883 -t 'debug/#' -v

# 终端 B:发布
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:过滤 mqtttcp.port==1883
  • TLS 场景需密钥或改在 Broker 侧打明文日志(注意隐私)

MQTT5:优先读 Reason Code 与 DISCONNECT 原因,少靠猜。


5. 运维 Checklist

  • 生产强制 TLS + ACL
  • Client ID 规范(唯一、可追溯)
  • 保留消息策略评审(命令 Topic 慎用 Retain)
  • 磁盘持久化与备份(若启用)
  • 监控告警:连接数、拒绝数、队列深度
  • 版本策略:3.1.1 / 5.0 混部测试
  • 升级演练与桥接回归

6. 本地开源项目入口

目的 目录
轻量 Broker ../开源项目/mosquitto
边缘 Broker ../开源项目/nanomq
大规模 Broker ../开源项目/emqxhivemq-community-edition
Python 客户端 ../开源项目/paho.mqtt.python
C 客户端 ../开源项目/paho.mqtt.c
JS 客户端 ../开源项目/MQTT.js
ROS 2 桥 ../开源项目/ros2_mqtt_client

下一篇:09-规范与资料索引.md

文章互动

阅读 --

留言

0 条留言

正在加载留言…