curl -s https://api.example.com/v1/tasks/task-8821 | python -m json.tool

提交异步任务后轮询一直 running,回调那条记录始终没来,任务实际 20 分钟前就完成了。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,回调只发一次,对方超时或 5xx 就丢弃,没有重试也没有补偿查询。结果留在上游,本地无从得知。

「异步任务回调丢失」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

处理上按这个顺序:提交后启动轮询 每 30 秒查一次状态;回调只当加速通道 不作为唯一来源;回调失败进重试队列 最多 5 次;任务超时设上限并告警。

改完只确认一件事:关掉回调后仍能通过轮询拿到结果 任务状态不再长时间停在 running。

作者 9823189