办公自动化重跑后新增重复记录,怎样设计业务键和幂等检查?
办公自动化重跑新增重复记录时,应先为同一业务事件定义稳定键,再检查触发重放、重试和并发创建。先查再建若不具备原子性,仍可能同时创建多份。
先从这里排查
办公自动化重跑新增重复记录时,应先为同一业务事件定义稳定键,再检查触发重放、重试和并发创建。先查再建若不具备原子性,仍可能同时创建多份。把去重状态持久保存,并采用服务支持的唯一约束或幂等机制,验证实际记录只有预期一份,不能仅通过隐藏重复行解决问题。
先定义一次业务事件对应的唯一结果
适用于定时任务补跑、表单重复通知或创建接口超时后再次执行的流程。保存触发事件标识和目标记录,确认同一意图的重放范围,另行定义真正的新事件。姓名或标题可能重复但并非同一业务,不应直接作为全局唯一键;时间戳每次变化也不能有效识别同一次重放。
检查触发重放和查询创建之间的竞争
沿流程追踪触发次数和每次创建请求,检查是否在创建成功但保存去重标识前中断。再核对并发时两个任务是否都查到不存在,随后各自新增。内存集合无法覆盖重启,多步骤外部写入还可能只完成一部分,不能把整个工作流一律当作可安全重跑的纯计算。
持久保存业务键并利用唯一约束
选择稳定事件ID或有明确业务含义的组合键,在首次动作前保存关联,并让目标端使用支持的唯一或幂等机制处理重复。冲突时读取已有结果,不盲目覆盖不同内容。对部分完成任务记录每步状态,必要时从已确认位置继续,不采用删除全部目标数据再重跑的破坏性办法。
重放并发及响应丢失后核对数量
在授权测试环境重放同一事件,并测试并发和创建后响应丢失,确认目标记录数量与业务键对应正确。再提交一个真正的新事件,验证不会被误去重。成功既包括没有重复,也包括不漏掉合法新任务;流程结束状态正常或重复行被过滤,都不是底层去重正确的充分证据。
本文没有重跑真实工作流或删除重复业务数据。不同目标服务的唯一约束与幂等保留期不同,应核对能力,不能把SQLite语法直接套到第三方表格。已有重复需要按业务规则审阅合并,自动去重设计不等于获得删除历史记录的授权,也不保证所有多系统动作恰好一次执行。
核对来源
以下资料用于核对概念和方法。文中的示例与测试范围分别注明,实际使用时请核对所用工具的版本。