20-RabbitMQ应用问题-消息幂等性保障
2023-03-07 09:06:39 时间
20-RabbitMQ应用问题-消息幂等性保障
RabbitMQ应用问题
- 消息可靠性保障
- 消息补偿机制
- 消息幂等性保障
- 乐观锁解决方案
消息幂等性保障
幂等性指一次和多次请求某一个资源,对于资源本身应该具有同样的结果。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同。
在MQ中指,消费多条相同的消息,得到与消费该消息一次相同的结果。
消息幂等性保障--乐观锁机制
消息发送还是之前的消息补偿流程图,而这里消息幂等性保障主要是依赖 DB 的乐观锁机制。
需求:
下面我们需要进行一个订单扣除金额的幂等性保障,例如我们发起扣除500元的消息,如果发出了多条扣除消息,到最后只允许扣除500元,不允许多次扣除。
实现思路:
当第一次发送消息,内容:id=1,money=500,version=1
当时此时 Consumer 发生了故障,要求 Producer 再次发送消息,此时 Consumer 将会收到两条消息:
id=1,money=500,version=1
id=1,money=500,version=1
Consumer此时收到两条相同的消息,为了避免重复执行,SQL更新需要设置 version 的变更:
-- 第一次执行:version=1,执行结果生效,扣除了500元
update account set money = money - 500 , version = version + 1
where id = 1 and version = 1
-- 第二次执行:version=2,由于where条件查询不到 version=1 的结果了,所以第二次执行将失败
update account set money = money - 500 , version = version + 1
where id = 1 and version = 1
相关文章
- 通过KubeVirt让容器和虚拟机一起工作
- 苹果 iOS / iPadOS 16 将在年内获得五项新功能:外接显示器、无边记 App 等
- 苹果官方详解 macOS 13 Ventura 正式版:台前调度、连续互通相机功能,让 Mac 体验更胜以往
- Openharmony学生挑战赛分享-少儿语言教育APP
- Xubuntu 22.10:热门新功能
- 如何在 Flutter 中构建增强现实应用
- Android 平板端 Chrome 浏览器新功能:支持可视化标签页、拖放功能
- 一文带你进入微前端世界
- 微软 Windows 11 22H2 Moment 更新今日起推送:标签页文件资源管理器、任务栏任务管理器回归
- Arch Linux 中用于包管理的图形化应用
- 类似 Notion 的 Markdown 笔记应用黑曜石推出测试版
- Canvas在超级玛丽游戏中的应用
- Native C++应用Demo示例(eTS)
- 在九联Unionpi Tiger上开发一个好玩的应用-抽奖游戏
- ArkUI eTS健康饮食APP之自定义PieChart组件
- 跟着小白一起学鸿蒙[-- 蓝牙应用(八)
- ArkUI eTS健康饮食APP之自定义TextPicker组件
- Openharmony应用开发--健康饮食APP分解
- 如何在 Linux 中使用媒体传输协议访问安卓设备的内部存储和 SD 卡
- 跟着小白一起学鸿蒙之第一个Hap应用(六)