一、概览
幂等是一个很重要概念,往往和重试联系在一起。当某个请求重试时候,为了规避之前执行成功的操作,需要加上幂等判断。
该组件的目标是:
1.基于“能力声明化”的方式,为接口快速添加幂等保护
2.支持常见的两种幂等保护策略
a.直接返回上次的执行结果;
b.抛出异常告知重复提交。
二、组件设计
1.流程设计
2.数据模型
CREATE TABLE `idempotent_execution_record` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`type` int(11) NOT NULL,
`unique_key` varchar(64) NOT NULL,
`status` int(11) NOT NULL,
`result` varchar(1024) DEFAULT NULL,
`create_date` datetime DEFAULT NULL,
`update_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `unq_type_key` (`type`,`unique_key`)
) ENGINE=InnoDB;
3.状态流转
幂等记录状态流转的一致性可以基于db行锁实现,
如并发初始创建记录,插入成功只有一个进程。
如并发修改状态,根据乐观锁基于原来状态更新(ABA问题可以不考虑)。