resp = requests.post(url, json=payload, timeout=5)
if resp.status_code >= 300:
raise RuntimeError('callback %s %s' % (resp.status_code, resp.text[:200]))
任务详情显示成功,下游系统没收到通知,回调地址那台机器 nginx 日志里全是 502,持续两天没人发现。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:回调代码只捕获了连接异常,HTTP 状态码没有判断,requests 不抛异常就直接当成功。任务状态只看函数有没有抛错。
「回调失败静默」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
处理上按这个顺序:回调后显式检查 status_code 非 2xx 抛异常让任务失败;给回调加超时和有限次重试;把回调结果写进任务记录 成功失败都能查;对连续失败的地址做告警 别等业务方来问。
确认没问题再收工,把回调地址指向一个必定 502 的端口 任务状态变为失败 记录里能看到 502 和响应片段。
