Skip to content

前端进度不动、SSE 断连或显示成功但产物缺失时怎么排查?

题型:问题排查 · 先判断是展示链路故障、任务故障还是提交协议故障。

排查顺序

  1. 用同一个 jobId 查询权威状态:若状态仍推进,问题在事件分发、代理或 Next.js 客户端;若状态也停滞,再查调度器、Worker 和模型调用。
  2. 对 SSE 链路逐段检查浏览器 EventSource、Next.js 代理或网关、FastAPI 连接、事件订阅和状态源,重点看空闲超时、缓冲、心跳、Last-Event-ID 与重复订阅。
  3. 进度不动但任务运行时,检查事件是否被合并过度、sequence 是否被客户端误判为重复,以及高频流是否让关键状态排队。
  4. “显示成功但产物缺失”要核对 completed 的发送顺序、产物清单是否已提交、对象是否可读、签名地址是否过期,不能只修前端文案。
  5. 区分可重试的连接失败、不可重试的鉴权或参数错误、结果未知的外部生成,以及已经产生图片或视频副作用的请求。

止损与永久修复

客户端先降级到带退避的状态轮询,服务端暂停发送错误的 completed,并隔离产物未就绪的任务。永久修复可包括延长但不过度放宽代理超时、增加心跳、快照加增量重连、关键事件持久化,以及把“状态成功”条件改为产物提交完成。

验证与复盘

模拟浏览器断网、代理重启、重复 eventId、慢消费者和产物服务超时,确认重连后状态能收敛且不会重复触发任务。监控 SSE 重连率、最终事件缺失、成功无产物、状态陈旧和轮询降级比例。

易错点

  • 不要在 SSE 重连时重新提交生成命令,查询和命令必须分离。
  • 不要把 HTTP 连接正常结束当成业务成功,必须读取明确的最终状态。

知识关系

从当前问题继续深入,或者回到提出这个问题的知识入口。