业务场景:
用户用不同浏览器打开了同一个订单,后一次修改覆盖了前一次修改的内容,导致下单错误。
拓展场景:改变订单信息的任务被创建且未写入前,其他用户修改了订单信息,该任务完成后覆盖了这次修改的内容。
已知实现方案和优劣:
1.(暂定)编辑锁
- 锁查询接口,前端传入业务 code 和当前业务唯一 id 来创建和查询锁
- 业务 code 由后端订,保证跨服务唯一性
- 当有锁存在时返回正在编辑的用户信息
- 有返回的话,在进入页面和保存页面时出现提示,但非强制拦截(解锁接口可能未成功发起)
- 进入页面时提示是为了避免用户录入大量信息后无法保存
- 保存时提示是为了避免用户在页面长期停留后遗忘了进入时提示
- 在页面组件销毁、浏览器或标签关闭时调用解锁接口
2.数据版本号
- 缺点:
- 不能拦截同一时间发起的数据修改