标准答案

  1. 同步接口适合短、可快速完成且需要立即返回的任务;长任务通过任务 ID 入队,消费者执行并持久化状态,前端通过 SSE、轮询或回调获取进度。
  2. 队列提供削峰、重试和并发控制,但任务必须幂等、可取消、可过期,并有死信和人工处理路径。
  3. 事件用于通知状态变化,任务表是查询事实;不能只依赖队列消息判断任务是否完成。

题目解析

同步连接超时后,服务端可能还在调用模型,造成孤儿任务和重复提交。异步任务可以让客户端断开不影响执行,但也要支持取消和预算回收。

队列重投会导致重复消费,消费者要用任务版本、幂等键或状态条件更新防止重复模型调用和重复副作用。

任务状态应能表达 queued、running、waiting、succeeded、failed、cancelled 和 expired,前端据此决定下一步。

常见误区

  • 把超长模型调用一直挂在 API 请求中。
  • 队列失败后无限重投,没有死信和预算限制。
  • 用“消息已入队”直接显示任务成功。

作者信息