解决并发保证数据一致性幂等性方案

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决并发保证数据一致性幂等性方案相关的知识,希望对你有一定的参考价值。

解决高并发、保证数据一致性、幂等性的方案

基本思路:在每次请求服务之前,先必须调用"令牌服务",获得一个唯一的令牌,然后再带上令牌ID这个参数去调用相关的服务。由于这个令牌ID是唯一的,所以,这样可以有效的防止同一个业务多次执行。

具体步骤如下:

step1.首先在数据库中创建一个存放令牌相关信息的表open_ticket;

step2.定义调用令牌服务的参数:至少包括 操作用户、业务编号、业务场景类型;

step3.定义获取"令牌"的服务TicketDTO builderTicket(TicketCreateParam ticketCreateParam)

    a.检查创建参数的完整性;

    b.检查当前唯一业务编号令牌是否已经创建;

    c.TicketDTO newTicket = builder(ticketCreateParam);

step4.调用相关业务服务执行成功后更新令牌信息的状态为成功。


说明:一般在电商项目中,这种高并发是很常见的,为了防止同一个业务被多次执行,比如一个订单可能被多次支付,重复扣钱,我们就可以通过这个方案有效的避免,比如当同一个订单第二次进行支付时,由于订单号和上一次相同,业务类型也是订单支付,所以在调用"令牌服务"时,会被检查到此业务已经创建过令牌ID,且状态还是受理中,这时,创建令牌服务信息就会失败,直接返回,后面的支付操作就不会被执行到了

本文出自 “Flyfish” 博客,请务必保留此出处http://9381188.blog.51cto.com/9371188/1793202

以上是关于解决并发保证数据一致性幂等性方案的主要内容,如果未能解决你的问题,请参考以下文章

MQ中的坑及高并发下保证接口的幂等性

MQ中的坑及高并发下保证接口的幂等性

rabbitmq 怎么保证幂等性,数据一致性问题

并发扣款一致性,幂等性问题,这个话题还没聊完!!!

相关支付业务测试中如何保证幂等性

分布式-幂等性解决方案