快速结论:MQTT QoS 1处理消息交付,不替代业务事件身份与工单执行记录。建筑物联网接入时,应区分协议报文、业务事件和处置任务,再用重复、重连、并发及标识冲突用例核验接口边界。
作者:南京古河软件|发布日期:2026-10-12
园区设备上报一条故障事件,经过消息服务、事件处理和工单系统,才会成为值班人员接到的任务。网络恢复后看到同一事件再次到达,并不意味着现场又发生了一次故障;反过来,两次相同读数也不一定是同一业务事件。接入设计要把“消息有没有交付”和“这件事已经处理到哪一步”分开。
依据OASIS《MQTT Version 5.0》2019-03-07版第4.3.2节,QoS 1允许重复交付,Packet Identifier(报文标识)在对应PUBACK确认后可复用。第4.4节说明:保留会话重连时,未确认报文使用原标识重发。这些是协议规则,不是工单创建成功的证明;本文后续的业务去重方案属于工程建议。
| 对象 | 标识与作用 | 不应代替什么 |
|---|---|---|
| MQTT报文 | Packet Identifier对应协议交换中的确认,作用域和生命周期由协议会话管理 | 不能作为长期、跨服务的业务去重键 |
| 业务事件 | 来源范围与event_id共同指向一次业务事实;重发同一事实时保持身份 | 设备编号、读数或当前时间不能单独证明事件唯一 |
| 处置任务 | 任务编号或action_id对应一次明确的处置意图,并记录创建、执行及复核状态 | 一次报警不一定只有一个任务,多岗位处理须有明确动作范围 |
教学例子:来源命名空间为“园区演示A/网关演示1”,事件编号为“evt-demo-001”,设备为“demo-fan-01”。接口重发仍用同一事件身份;后续新故障必须生成新的事件身份,即使设备、报警码和读数相同。这些值仅用于说明设计,不是古河接口字段或客户数据。

幂等是指重复提交同一处置意图,不应重复产生该意图对应的业务副作用。可以按“来源范围、事件身份、动作类型及目标范围”建立业务键,记录处理状态和关联任务。事件存储、工单创建及外部通知分别核验,不能只凭消息接收日志认为整条链路完成。
典型故障窗口是:工单已创建,但处理进程在保存完成状态前退出。恢复后若只看到“未完成”,再次建单就会重复;若先记“完成”再建单,中途失败又可能漏单。单一事务边界内,可考虑唯一约束与业务写入的原子提交。跨服务时应核对目标接口的幂等键、可靠待办与结果回查机制;不能把跨系统操作宣称为一个全局原子事务。
并发消费者也需要同一约束。两个请求同时“先查询、后插入”,都可能读到不存在,单纯增加查询并不能防止竞态。处理中的记录还应有明确恢复责任:谁能接续、如何确认目标任务已经存在,以及失败或部分完成怎样留痕。
以下为建议用例,本文没有实际运行这些测试,也不提供通过率或性能结论。应使用隔离演示环境、当前交付版本和约定接口执行,禁止拿真实安全控制动作测试。
| 输入或操作 | 预期及核验依据 | 不通过条件 |
|---|---|---|
| 正常:提交一个新事件和一个明确建单动作 | 一个事件身份关联一个该动作任务,能查询业务完成状态及任务编号 | 仅有协议确认,查不到业务结果或关联关系 |
| 异常:工单创建后模拟进程退出,再重放同一业务事件;并另测同键并发 | 恢复时回查既有任务,不重复创建;记录重试和恢复依据 | 同动作生成多个任务,或卡在处理中且无人可恢复 |
| 边界:协议标识可复用时,发送不同event_id但相同设备与读数的新事件 | 两件合法事实分别保存;是否合并工单由独立业务规则决定 | 仅因报文编号或内容相等,错误删除新事件 |
| 异常:同一业务键提交不同设备;另测超过保留窗口的重放 | 冲突和过期输入有约定处理及可查询记录 | 静默覆盖,或无依据地重复执行外部动作 |
古河公开产品资料将建筑物联网数据中台BIOT用于设备与模型、实时历史数据、告警和应用接口,GH-IBMS组织建筑系统监控及业务协同,FM智慧运维面向设施任务与过程记录。MQTT等消息方式属于数据交换手段,具体协议版本、客户端确认时机、事件身份及工单接口需要按所选组件和项目验证。
本文不宣称古河所有版本已经实现上述业务幂等设计,也不宣称采用特定消息组件、通过MQTT认证或实现跨系统恰好一次执行。建设前宜让接入方、平台方和工单责任方共同确认来源命名空间、补传范围、动作身份、恢复流程和审计记录。
相关资料:建筑物联网数据中台BIOT的设备与数据组织、智慧园区多系统协同方案、FM智慧运维的设施任务管理。
OASIS,MQTT Version 5.0(2019-03-07),第4.3节交付范围、第4.3.2节QoS 1及第4.4节重发;检索日期2026-10-12。标准仅支持协议机制解释,业务键、故障窗口、冲突策略与用例为本文工程推导。QoS 2的协议交付语义也不能直接证明数据库、外部工单与现场动作共同恰好执行一次。
南京古河软件|通用技术方法与公开产品定位说明,不包含客户项目或未公开实现资料。