,并不关注结果
网络超时等问题,不是幂等的讨论范围
幂等性是系统服务对外一种承诺,而不是实现
承诺只要调用接口成功,外部多次调用对系统的影响是一致的
声明为幂等的服务会认为外部调用失败是常态,并且失败后必然会有重试...幂等性的使用场景
业务开发中,经常遇到重复提交的情况:
由于网络问题无法收到请求结果而重新发起请求
前端的操作抖动而造成的重复提交的情况
在交易系统中,支付系统这种重复提交造成的问题尤为明显:
用户在...,也是幂等操作
UPDATE tab1 SET col1=col1+1 WHERE col2=2: 每次执行的结果都会发生变化,这种不是幂等的,要采取策略保证幂等性
设计幂等性服务
幂等使得客户端逻辑处理很简单...,但是服务端逻辑会很复杂
满足幂等性服务需要包含两点逻辑:
首先去查询上一次的执行状态,如果没有则认为是第一次请求
在服务改变状态的业务逻辑前保证防重复提交的逻辑
保证幂等策略
幂等需要通过唯一的业务单号来保证...进行支付操作
无论成功与否,执行完成之后更新订单的状态为成功或失败,删除去重表中的数据
后续订单因为表中的唯一索引插入失败,返回操作失败,直到第一次请求完成(成功或者失败)
防重表的作用是实现加锁的功能