面试官: RocketMQ 如何达到消息一致性

1. 错误思路
  • 问题描述: 发送MQ超时导致事务回滚,但下游可能错误地感知到订单更新成功,而数据库状态未更新,造成数据不一致。
2. 基于 RocketMQ 的分布式事务
  • 事务消息: RocketMQ提供的高级消息类型,支持分布式场景下消息生产与本地事务的一致性。
    • 交互流程:
      • 生产者发送消息至RocketMQ服务端。
      • 服务端持久化消息后返回Ack,消息标记为"暂不能投递"(半事务消息)。
      • 生产者执行本地事务逻辑。
      • 根据本地事务结果,生产者提交二次确认(Commit或Rollback)。
      • 服务端根据确认结果处理消息。
    • 特殊情况处理:
      • 网络问题或生产者重启,服务端发起消息回查。
      • 生产者检查本地事务状态,再次提交确认。
3. 基于本地事务的一致性处理
  • Spring框架: 实现MQ最终一致性的过程。
    • 业务数据更新: 在事务保护下更新数据库。
    • 创建本地消息记录: 创建包含将来发送至MQ的消息的记录。
    • 业务事务提交: 确保数据更新和消息记录的原子性和一致性。
    • 异步发送消息: 消息服务轮询未发送消息,发送至MQ并更
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值