RabbitMQ如何保证幂等性?

本文探讨了幂等性在分布式系统中的重要性,特别是在涉及资金交易的系统中。介绍了幂等性的概念,强调它关注的是操作对资源的影响而非结果。接着,讨论了RabbitMQ中可能导致非幂等性的两种场景,并提出了通过全局唯一ID结合Redis来避免消息重复消费的解决方案,以确保消费者的幂等性。
摘要由CSDN通过智能技术生成

有个兄弟去年参加阿里面试的时候,就被问到了幂等性的问题。

幂等性是分布式系统设计中的一个重要概念,是在做系统或者接口设计时要着重考虑的问题,尤其像支付宝、银行、互联网金融等涉及钱的系统,既要高效,数据也要准确,绝对不能出现多扣款,多打款等问题,幂等性的设计就显得更为重要了。

本文我们就先来解释一下什么是幂等性?然后再看一下在MQ中怎么保证幂等性?

一、什么是幂等?

幂等性的实质是:对于一个资源,不管你请求一次还是请求多次,对该资源本身造成的影响应该是相同的,不能因为重复相同的请求而对该资源重复造成影响。注意关注的是请求操作对资源本身造成的影响,而不是请求资源返回的结果。

如select * from t_user where id>10这条语句,假如在一次查询后数据库进行了insert或update操作,那么第二次再查时返回的结果可能与第一次不同,但这个操作是符合幂等性的,因为我们说过关注的是对资源的影响,不是返回的结果,虽然两次查询的返回结果不同,但select不管执行多少次,对数据库中的数据资源本身都不会产生任何影响。

幂等性包括:

① 一次或多次请求,对资源均不会造成影响,比如select操作;

② 第一次请求对资源产生了影响,后面再发出多个相同的请求,与发出单个请求具有相同的效果,不能重复对资源产生影响。比如支付宝转账,手抖重复提交了2次,第一次扣款成功,余额减少100元,第二次就不能再重复扣款了。

③ 需要说明的是网络超时、服务宕机等问题,不是幂等的范围。

幂等性是系统服务对外的一种承诺。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值