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
相关产品推荐
相关产品推荐

