问题描述
我正在尝试使用以下模式实现幂等请求:
-
创建或查找幂等键并确定是否为重试
-
a) 如果不重试,则处理
b) 如果重试 && 结束状态 => 返回保存的幂等响应
c) 如果重试且可重试 => 处理
-
坚持
现在我在处理并发方面有点不知所措:
-
两个请求同时进来并尝试插入幂等键。我是否处理 Uniquekeyviolation 并使用 409 - Conflict 丢弃违规请求?我是否执行插入 SERIALIZABLE 的整个事务并使用 409 而不是 Uniquekeyviolation 处理错误?问题是处理的结果可能会发送到错误的请求(单击按钮两次,第一个请求开始处理,但第一个请求甚至不再存在,用户只得到 409)。
-
两个并行请求来读取幂等键并查看状态是否可重试。我是否 SELECT FOR UPDATE 键,并在所有处理完成后通过提交释放锁?否则两个进程可能会尝试重试
总结一下:如果这样的记录已经存在,如何防止多个进程并行插入密钥和/或重新启动。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)