分布式环境下,各个服务经常需要互相调用,如何保证调用的任务只被执行一次?本章基于数据的悲观锁,实现了任务的幂等性控制。
幂等性:多次执行所产生的影响均与一次执行的影响相同。比如在一次支付场景中,无论你点击多少次按钮,最终都应该只有一次扣款行为。
1. 根据全局业务流水号businessId查询数据库记录
IdempotentTask taskResult = idempotentTaskMapper.selectByBusinessId(businessId);
2. 判断之前是否有任务存在,如果不存在,本次任务落库。并发情况下也只会有一条写入成功
if (taskResult == null){
IdempotentTask task = new IdempotentTask();
task.setBusinessId(businessId);
task.setCreated(new Date());
task.setModified(new Date());
/