分析&回答
通过全局唯一ID
根据业务的操作和内容生成一个全局ID,在执行操作前先根据这个全局唯一ID是否存在,来判断这个操作是否已经执行。如果不存在则把全局ID存储到redis中,继续执行业务。如果存在则表示该方法已经执行,直接返回。适合单一逻辑处理。
状态机控制
有状态机流转的情况下,比如就会订单的创建和付款,订单的付款肯定是在之前,这时我们可以通过在设计状态字段时,使用int类型,并且通过值类型的大小来做幂等,比如订单的创建为0,付款成功为1。付款失败为-1。比如加一个订单操作中6,进入6之后其他非支付流程不能被唤起。
版本控制
同理状态机控制,在数据库中有个 Version 的,在version < x才能继续操作。
反思&扩展
相同思考:分布式系统中的接口调用如何保证顺序性?
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!