DDD-接口幂等性

幂等性

以相同的请求调用这个接口一次和调用这个接口多次(重试机制),对系统产生的影响是相同的;
查询接口基本都是幂等;

方案(前端)

1.提交按钮置灰
2.前端在下单页面生成token(可以前端生成,或者后端提供)
3.前端保存一个未确认订单的订单内部表。

方案(后端)

1.保存幂等ID和对于的参数(redis或者去重表(主键去重,唯一索引))
2.状态机判断当前状态和下一步状态的边界范围(需要再次校验幂等ID对应的参数,是否和服务端保存的参数一直,避免被利用检测漏洞)
3.乐观锁判断(很有局限性,无法事务性的更新原子操作多张表,比如积分表和对应的状态机表)
4.主动扫描重复订单,反向通知前端

幂等判断 在哪一层

第一层:APP、H5、PC

第二层:负载均衡设备(Nginx)

第三层:网关层(GateWay)

第四层:业务层(Service)

第五层:持久层(ORM)

第六层:数据库层(DB)

建议在第四层,或者第二层

kafka消息的幂等

TODO。。。

参考

https://juejin.cn/post/6954979098569637896
https://www.cnblogs.com/yaochunhui/p/13993175.html
https://www.cnblogs.com/54chensongxia/p/12598944.html