运单图片走通用文字识别,客户端超时设成 3 秒,网关日志里 504 Gateway Timeout 占当天请求的 12%,失败的单子被标成待重传,没人补跑。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,识别接口在图片排队时偶尔要四秒以上,客户端三秒就断开,服务端还在算,两边都拿不到结果。任务表只有一个失败状态,没有重试次数字段,也没有补偿任务。

「识别接口超时重试」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。改完顺手把文档补一句,省得下次自己重新推一遍。

curl -s -o /dev/null -w '%{http_code} %{time_total}\n' \
  -X POST https://ocr.example.com/v1/recognize \
  -H 'Authorization: Bearer $TOKEN' -F image=@waybill.jpg

监控和日志的时间要对上,时区不一致会多绕很大一圈。

具体做法是,把超时从 3 秒放宽到 8 秒 覆盖 P99 而不是平均值;区分错误类型 504 和 429 进重试队列 400 直接落死信;按 1 秒 3 秒 9 秒退避重试三次 超过再告警;补一个定时任务 按天扫待重传的单子。

最后用这个标准收尾,重跑后 504 占比降到 1% 以下 待重传队列当天清零。

作者 9823189