IT码农干货分享Java学习笔记

防止重复下单和幂等模式的应用

2017-08-23  本文已影响208人  慢慢来了

重复下单

案例1:
   1. 用户点击“确认下单”按键进行下单操作;
   2. 后台系统接收到请求,并处理返回结果;
   3. 网络发生问题,用户没有收到成功返回,以为没有下单成功,再次发起请求;

案例2:
   1. 用户因为某种原因,多次发起“确认下单”请求,但以为只请求一次;
   2. 后台系统在1秒内接收到同一个用户的多次相同请求,并处理返回结果;

HTTP的幂等性

HTTP方法的幂等性是指一次和多次请求某一个资源应该具有同样的结果。在HTTP 1.1规范中幂等性定义是:
Methods can also have the property of "idempotence" in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request.
幂等性的数学表达:f(f(x)) = f(x)。

幂等性的系统说明

幂等性是系统的接口对外一种承诺而不是实现, 承诺只要调用接口成功, 外部多次调用对系统的影响是一致的. 声明为幂等的接口会认为外部调用失败是常态, 并且失败之后必然会有重试。

检测重复下单

在下单接口中,使用随机字符串来生成一个处理订单Id来标识一个订单接口传入(由后端系统来生成);后台系统保证每个订单传入的都必须是唯一,如果后台系统发现处理订单Id重复就拒绝成生订单

接口的幂待性

接单接口中传入的ID,至多只会被处理一次(处理完的,直接删除传入的ID),且每次调用都返回第一次调用时的处理结果。这样调用方就可以放心的多次调用,而不会造成系统数据混乱与结果的错乱。

鉴于这个机制,案例1与2的解决方案如下:

上一篇 下一篇

猜你喜欢

热点阅读