目录
七、示例伪代码(基于 Spring Boot + MQTT)

一、概述
在 IoT 系统中,设备端、网关、云端服务和应用端(App/Web)之间往往存在跨多个微服务、异步通信和状态不一致问题。例如:
-
设备注册 → 云端绑定 → 用户授权 → 设备激活
-
开锁请求 → 云端鉴权 → MQTT 下发 → 设备执行 → 状态回传
这些流程本质上是一个分布式事务,但 IoT 系统无法使用传统的两阶段提交(2PC),因为:
-
通信不可靠(MQTT、WebSocket 可能掉线)
-
设备端是弱算力、非事务节点
-
时序性和最终一致性比强一致更重要
因此,Saga 模式非常适合 IoT 场景,通过将长事务拆解为一系列 本地事务 + 补偿操作 来保证系统的最终一致性。
二、Saga 模式原理
Saga 模式分为两种实现方式:
| 类型 | 说明 | 适用场景 |
| Choreography(编排) | 各服务通过事件驱动完成自己的本地事务,触发下一个事件 | IoT 场景最常用(MQTT/EventBus) |
| Orchestration(协调) | 有一个“协调器”负责调用每个步骤并监控结果 | 适合流程复杂、有状态机需求的设备 |
三、IoT 场景应用示例
场景1:智能锁远程开锁流程
用户App → 云端鉴权 → 发送MQTT命令 → 设备执行 → 回传状态
该流程可抽象为一个 Saga:
| 步骤 | 本地事务 | 补偿操作 |
| Step1 | 验证用户身份 | 撤销授权、记录异常日志 |
| Step2 | 记录开锁指令(DB事务) | 删除指令记录 |
| Step3 | MQTT 下发指令 | 发布“撤销开锁”指令 |
| Step4 | 等待设备ACK并更新状态 | 超时后标记失败并通知用户 |
最终形成一个Saga 状态流:
Pending → Executing → Acked → Completed
↘︎ timeout → Rollback

最低0.47元/天 解锁文章
1084

被折叠的 条评论
为什么被折叠?



