我从网搜上搜了一个幂等的含义:“对同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的。”
广义的讲,这个系统资源的影响应该包含调用方和被调用方。
只不过很多系统设计采用不同策略来保证幂等,被调用方对同一请求只处理一次是一个简化的幂等版本。只保证了对自身的影响是一致的,没有考虑对调用方的影响。做的更好的情况下,应该保证返回值是一样的,这样才能保证分布式情况下资源状态是一致的。
所以题主的问题也一样,上来直接问的问题就是怎么保证不被重复处理,其实这个问题已经曲解了幂等的含义,不是要避免多次调用,是要保证多次调用对自己和对方产生的效果是一致的(对业务数据产生的效果一致,但是记录些技术日志之类的不影响幂等)。
【 在 Mikov 的大作中提到: 】
: 标 题: Re: 如何避免同一个请求被调用多次?
: 发信站: 水木社区 (Sun Jun 4 23:08:59 2023), 站内
:
: 你就说你是做商户还是做通道吧, 是接通道还是接两联
:
: 支付一个流程从下单发起, 到回调确认, 后面还有分账和退款, 哪一家也不敢跟你保证, 同样的请求给你同样的返回. 这中间七弯八拐的情况太多了.
:
: 幂等就一个定义: 对同一资源ID的多次请求只处理一次
:
: 至于返回结果要不要一样, 这是次要的, 各家有各家的定义.
:
: 幂等不是用"返回结果"这个东西来解释的, 不要误导.
:
:
:
: 【 在 licy 的大作中提到: 】
: : 我做过支付,所以举了这样的例子
: : 我再解释下场景:
: : 在分布式的情况下,系统的之间的状态很容易不一致,因此,系统会出现自动的重试或者报文的补发,在这种情况下,为了系统间状态一致,需要小心的对每次请求做幂等处理
: : ...................
:
: --
:
: ※ 来源:·水木社区
http://www.mysmth.net·[FROM: 115.47.107.*]
--
FROM 124.64.23.*