前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >20-RabbitMQ应用问题-消息幂等性保障

20-RabbitMQ应用问题-消息幂等性保障

作者头像
Devops海洋的渔夫
发布2023-02-10 13:59:42
2060
发布2023-02-10 13:59:42
举报
文章被收录于专栏:Devops专栏

20-RabbitMQ应用问题-消息幂等性保障

RabbitMQ应用问题

  1. 消息可靠性保障
  • 消息补偿机制
  1. 消息幂等性保障
  • 乐观锁解决方案

消息幂等性保障

幂等性指一次和多次请求某一个资源,对于资源本身应该具有同样的结果。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同。

在MQ中指,消费多条相同的消息,得到与消费该消息一次相同的结果。

消息幂等性保障--乐观锁机制

消息发送还是之前的消息补偿流程图,而这里消息幂等性保障主要是依赖 DB 的乐观锁机制。

需求:

下面我们需要进行一个订单扣除金额的幂等性保障,例如我们发起扣除500元的消息,如果发出了多条扣除消息,到最后只允许扣除500元,不允许多次扣除。

实现思路:

当第一次发送消息,内容:id=1,money=500,version=1

当时此时 Consumer 发生了故障,要求 Producer 再次发送消息,此时 Consumer 将会收到两条消息:

代码语言:javascript
复制
id=1,money=500,version=1
id=1,money=500,version=1

Consumer此时收到两条相同的消息,为了避免重复执行,SQL更新需要设置 version 的变更:

代码语言:javascript
复制
-- 第一次执行: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
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海洋的渔夫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 20-RabbitMQ应用问题-消息幂等性保障
    • RabbitMQ应用问题
      • 消息幂等性保障
        • 消息幂等性保障--乐观锁机制
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档