3.6 KiB
3.6 KiB
MQ-only:配置、身份与本地MQ基础验证(业务接线未完成)
已实现
- Dispatcher启动必须提供
--config。配置文件先校验,再访问数据库;凭据只按文件中明确的环境变量引用解析,授权时长固定15分钟。 - JSON拒绝重复键、未知字段、大小写别名、多个顶层值、无效UTF-8及超出64 KiB的文件;按已确认v2配置Schema校验,失败不部分修改配置,也不改读旧配置来源。错误不打印凭据值。
- SQLite通过
005_dispatcher_identity.sql保存唯一逻辑身份。换ID拒绝沿用数据库;身份校验在恢复通知之前,不能由错误身份改变待发送状态。 store.Open/New仅打开和迁移;恢复由启动入口在校验身份后显式执行。相关重新打开/进程崩溃恢复测试已同步。- RabbitMQ使用三组v2 durable topic exchange、独立Dispatcher/租户队列和非持久exclusive身份占用队列。同一ID重复启动被拒绝;启动时先取得MQ身份占用,再打开业务数据库。
- 发布只允许本D已经声明的租户出站路由;persistent、mandatory、publisher confirm与return共同判定成功。使用独立发布channel隔离迟到确认,复用连接。
- 收发限制256 KiB;超限入站消息不进入业务处理,进入对应持久DLQ,并记录身份、消息序号和大小,不打印正文。
实际验证
本地隔离RabbitMQ 4.1容器测试证明:
- 两个不同UUID使用同一租户时队列不相同,D1消息不被D2收走。
- 重复占用同一UUID失败,不影响原连接。
- 跨D消费/发布被拒绝。
- 指定SaaS持久队列实际收到persistent消息;不启动SaaS消费者也能完成发布。
- 移除目标绑定后,即使broker确认,mandatory return仍导致发布失败;恢复绑定后的下一次发布正常,不被旧return污染。
- 262145字节入站消息在修改前错误到达业务handler;加入大小门禁后通过,实际进入对应DLQ。
配置测试也先暴露了encoding/json接受大小写别名的问题;增加权威Schema校验后拒绝。配置缺失、身份变更及恢复顺序均有回归测试。永久消息分类测试使用真实Schema错误,不只检查手写错误字符串。
最新检查:
- Go:
go1.27.1 linux/amd64。 - 全仓
go test -race -coverprofile=... ./...通过;只显式启用本机RabbitMQ测试,其余外部集成开关清除。 go vet ./...、构建、格式及git diff --check通过;旧v1契约与704652b无差异。- 总覆盖率 35.1%,尚未达到65%;config 75.7%、MQ 63.6%、tenant 85.4%,不以局部数字替代整体要求。
- 9个文件的主动LSP检查无返回诊断,但均为inconclusive,不宣称LSP确认干净;以实际编译/vet/race结果为本轮检查依据。
- 临时日志及覆盖率:
/tmp/go-sip-mq-control.noMu1i/。该路径非长期制品。
未完成,不能签收全流程
contracts.SourceCommit固定为v1;业务消费、事件构建、outbox路由和必要请求响应统一使用该 V1 包。MQ传输测试仍不证明真实外部业务已接通。- 旧HTTP入口、CLI/环境中的旧配置选项及旧集成测试仍需清理;配置文件权威来源已接入不等于所有旧入口已删除。
- Broker连接丢失的通知已暴露,但所有准入/许可路径的停止联动还需验证。
- 上传仍待改为recording.uploaded及正确的R13完成边界;未验证通知恢复不重复PUT。
- 本轮只验证本地组件,不是完整非生产部署验收;未做ECS、SIP、真实供应商或生产验证。
当前为mq-control任务的部分证据,不关闭该任务或其余计划项。