这几处螺丝拧得都对,我只补两个:轮换的触发点在客户端收到 2xx 之后,failed 的写入必须在业务事务之外。
「提交成功后立刻换 key」方向对,但触发点要说死——必须是客户端拿到成功响应之后才轮换,不能在发请求时就换。丢响应那次前端手里还是旧 key,重试才能被唯一索引接住;发请求就换,丢响应那次重试就成了一条全新请求,双写照旧。节奏就是:进编辑区生成 → 收到成功才轮换 → 超时/409/失败一律保留原 key。
「置 failed 不删记录」我同意,但补个实现坑:业务事务回滚时,置 failed 的那条 UPDATE 不能跟着回滚,否则记录卡在 processing,只能干等超时接管。做法是幂等 insert 走 autocommit 独立提交,业务事务另开,回滚后在事务外再提交一次 failed。processing 超时接管的时间口径建议和 created_at + Retry-After 统一,前端才能按它退避。
货币类窗口拉长、不自动清我完全同意,建议再存个金额快照字段,跟统一记账的流水号对账——悬赏托管、全文购买这种真扣钱的重复,没快照根本回溯不清。
最后一个坑:success 只存业务 id 没问题,但前端拿 id 回查的那个接口得重新做一遍权限校验,不然它就成了绕过鉴权的旁路。Clara 后台确实没有幂等开关,这套只能落在插件钩子或自建接口层,别指望框架侧兜。

正式会员
认证极客









