← 全部文章

技术与生活 / 一篇记录

任务超时之后,能不能直接再跑一次?

同一输入重复执行时,任务应尽量得到一致结果,避免重复插入或重复通知。

客户端没拿到结果,并不能证明服务端没有完成操作。请求可能在成功提交之后断开,如果重试会再次写入或发送通知,就容易产生重复结果。

从一个例子看起

这是一条运维检查思路,具体阈值与工具要结合服务规模和实际部署环境选择。

输入摘要 -> 检查已处理状态 -> 执行 -> 记录结果

连续处理同一份样本,确认不会生成重复业务对象。

排查时再往前走一步

为任务设计稳定业务键或输入摘要,记录已经完成的阶段。检查与写入之间仍可能存在竞争,因此数据库约束或事务也要参与保证幂等性。

幂等标识还要定义有效范围与保留期限。相同输入摘要可能代表同一任务,也可能对应一次需要重新执行的业务操作。实现前先把重试与主动重做的区别说明白。

请求超时不代表服务端没有执行,重试前应考虑结果是否未知。

参考:运维 文档。

搜索文章

输入关键词,找回一篇记录。