咨询Inbox模式与Outbox模式的核心差异
Inbox模式 vs Outbox模式:核心差异解析
虽然两者都依赖数据库存储消息,但它们的定位、作用场景和解决的问题完全不同:
1. 核心定位
- Outbox模式:是消息生产者端的可靠性保障机制,专注于确保业务操作和消息发送的一致性。
- Inbox模式:是消息消费者端的幂等性保障机制,专注于避免重复处理外部消息。
2. 工作流程
Outbox模式的典型流程
- 服务执行核心业务操作(比如更新用户余额)。
- 在同一个数据库事务中,将业务数据变更和待发送的消息一起写入Outbox表。
- 独立的消息投递组件定时轮询Outbox表,将未处理的消息发送到MQ。
- 消息成功投递后,标记Outbox表中的对应记录为已处理。
Inbox模式的典型流程
- 服务从MQ接收到外部消息。
- 用消息的唯一ID(比如
message_id)查询Inbox表,检查是否已处理过该消息。 - 如果未处理,先将消息写入Inbox表,再执行业务逻辑;如果已存在,直接跳过(避免重复执行)。
- 业务逻辑执行完成后,标记Inbox表中的消息为已处理。
3. 解决的核心问题
- Outbox模式:解决「业务操作成功,但消息发送失败导致下游服务无感知」的一致性问题,避免出现数据不一致的情况。
- Inbox模式:解决「MQ重复投递消息,导致业务逻辑重复执行」的幂等性问题,比如避免重复创建订单、重复扣减余额。
4. 存储数据的意义
- Outbox表:相当于服务的「待发消息缓冲区」,存储的是服务要对外发送的消息,确保消息不会因服务崩溃、网络波动丢失。
- Inbox表:相当于服务的「已收消息日志」,存储的是服务接收到的外部消息,用来做重复校验和业务执行追溯。
内容的提问来源于stack exchange,提问作者Aleksander Chelpski
相关产品推荐
相关产品推荐

