首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

事务消息

  • 25-04-17 09:21
  • 4628
  • 9285
juejin.cn

数据不一致

在使用消息队列时,如何保证数据一致呢?

先举一个数据不一致的例子,比如生成了一个订单,然后要通知下游服务处理相应的业务,如果此时订单创建成功,但是发送给下游的通知丢失了,就会导致数据不一致。又或者说发送给下游的通知发送成功,但是订单没有成功创建。如何解决呢?可以采用事务消息。

Tips:如果你前面看不懂,可以看后面的例子

什么是事务消息

事务消息通过 两阶段提交(2PC)  和 事务状态回查 机制解决生产者侧的一致性问题。

1. 两阶段提交流程

  • 阶段1:发送预备消息

    • 生产者发送一条  "预备消息"  到消息队列,此消息对消费者不可见。
    • 消息队列持久化该消息并返回确认响应。
  • 阶段2:提交或回滚

    • 提交(Commit) :生产者完成本地事务(如更新数据库),通知消息队列提交预备消息,此时消息对消费者可见。
    • 回滚(Rollback) :若本地事务失败,生产者通知消息队列删除预备消息。

2. 事务状态回查

  • 超时未确认处理:若生产者未在超时时间内提交或回滚,消息队列会主动回查生产者。
  • 业务逻辑回查:生产者需实现回调接口,根据本地事务最终状态(提交或回滚)响应消息队列。

流程图

image.png

举个例子

image.png

  1. 商家接到订单之后,给配送站发一个“预备消息”
  2. 配送站收到后返回确认信息
  3. 商家开始备餐,备餐完成之后告诉配送站准备好了
  4. 配送站通知骑手

以上是顺利的情况,如果商家备餐期间发送问题,比如备到一半突然有急事(异常),通知配送站,那么配送站将其信息删除,骑手永远也不会知道这个订单;如果商家备餐期间厨房炸了(比如系统崩溃),也有可能太忙了,那么超时后配送站会打电话问商家怎么还没备好,便可知道是要通知还是删除。

注:本文转载自juejin.cn的Hard_X的文章"https://juejin.cn/post/7493386244366319642"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top