You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel队列任务收到400响应时如何触发写入failed_jobs表

Laravel自定义队列任务失败条件写入failed_jobs表实现

不要手动拼接SQL插入failed_jobs表,框架原生提供了手动触发任务失败的方法,和框架自动捕获异常的失败逻辑完全一致,会自动记录异常栈、任务载荷、触发失败回调和对应事件,还能兼容队列批次的失败统计。

  • 直接在你的判断分支中调用任务实例的fail()方法即可,该方法支持传入异常实例作为失败原因,方便后续排查问题。补全后的代码片段如下:
if($responseCode == 400){
    // 传入自定义异常记录失败上下文,会自动写入failed_jobs表
    $this->fail(new \RuntimeException("调用外部API返回400状态码,响应内容:" . $responseBody));
}

补充注意事项

  • 除了你手动判断的400场景外,其他未预判的运行异常、接口请求超时/连接错误等问题,不需要额外写判断逻辑,Laravel队列进程会自动捕获抛出的异常,自动将任务标记为失败存入表中。
  • 如果你的任务逻辑里加了try-catch块捕获异常,要么在catch块中把异常继续抛出,要么主动调用$this->fail($e),不要把异常直接吞掉,否则框架会判定任务执行成功,不会进入失败表。
  • 调用fail()方法后框架会直接走失败收尾流程,后续代码不会继续执行,不需要额外加return中断逻辑。
  • 手动调用fail()写入的失败记录,和框架自动生成的失败记录完全一致,支持后续使用队列重试命令重新执行。

内容的提问来源于stack exchange,提问作者Rendy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 02:46:01