稚鱼君 (@yrunow) 在 分享工作遇到的一个分布式微服务线上幂等问题 中发帖
分享一个线上幂等问题及简单解决方案
线上幂等问题:结算中心发起结算单之后调用审批中心时超时,导致请求触发重试(序列化失败请求的参数保存到重试表,并在定时任务触发重试时重新反序列化继续请求),但是在审批中心接受审批请求之后又正常的完成了审批流程,结算中心正常消费审批中心的消息做结算完成处理。然鹅在结算请求重试时又一次请求审批中心后,审批中心会再次创建一条审批流程数据,且由于结算已经完成了逻辑,也就无法再次消费审批的消息,也就导致用户在前台看到的单据明明已经审批完成,但审批流还在审核中的诡异状态。
解决方案:审批中心接口实体中增加事务ID(随机生成)uuid,审批中心只需要每次接收请求时校验是否已存在相同事务ID即可