# M06-A Broker 与 MQTT 基础 - 日期:2026-06-22 - 起始 commit:`a8c3e7d` - 工程 commit:`c140613` - ENGINEERING_DELTA=YES - 子阶段状态:PARTIAL/BLOCKED_EXTERNAL;可独立工程内容已完成并 push,游标推进 M06-B ## 工程增量 - 引入 MQTT.js 5.15.1,固定 MQTT 3.1(`protocolVersion: 3`)和 QoS 1。 - 后端启动时连接 Broker,使用持久会话、3 秒自动重连,并在每次连接后显式恢复 `/devicesend/+`、`/devicewill/+`。 - 下行只允许 `/deviceaccept/{DeviceID}`;DeviceID 校验限制为安全字符和 64 字符以内。 - 上下行消息默认限制 64 KiB;超限上行拒绝进入后续处理,超限下行不发布。 - ready 接口新增 MQTT 已配置、真实连接和订阅恢复三层状态。 - 生产环境要求 MQTT 用户名和密码成对存在,缺失时拒绝启动,凭据不写日志。 - 菜单 3 支持管理员选择安装/更新 EMQX,并检查架构、systemd、端口、包架构和服务器未安装 MQTTX。 - ACL 切换为正式三个厂商 Topic,后端账号和单设备账号使用最小权限。 ## 验证 - `npm test`:退出码 0,M01-A 至 M05-D 全量回归及 M06-A MQTT 测试通过。 - `scripts/dev/windows/test-all.ps1`:代码测试、构建、迁移计划、工作区和文档一致性通过;新文件暂存前完整性门禁按预期提示,显式暂存后复检通过。 - WSL `bash -n`:`setup.sh`、`scripts/setup/emqx.sh`、`mqtt-smoke.sh` 退出码 0。 - WSL EMQX:5.8.9、active/enabled、1883/8883/8083/8084/18083 均通过。 - WSL MQTT 认证冒烟:因本地 Git 忽略凭据未配置而 `SKIP`,未伪造通过。 - 工程 commit 已 push,`HEAD == origin/main == c1406137186d857c81180eb3643d385d05e3bb03`。 ## 外部阻塞 生产 Ubuntu 的 EMQX 安装、正式账号、ACL、端口限制、备份和真实发布订阅尚未由管理员执行;M06-A 因此保持 `PARTIAL/BLOCKED_EXTERNAL`,但不阻塞 M06-B 设备资产模型。 ## 后续 执行游标进入 M06-B:设备资产、能力和拓扑。