laravel 队列分发 ProcessPodcast::dispatch($podcast); 成不成功怎么知道?

作者站长头像
站长
· 阅读数 7

laravel 队列分发 ProcessPodcast::dispatch($podcast);没有返回值, 成不成功怎么知道?如果任务没有到redis 好像也没有保错

回复
1个回答
avatar
test
2024-06-28
try{
  $job = Jobs::dispatch();
  unset($job);
}catch(\Throwable $e){
  // 投递出现了问题
}

try...catch 捕获一下异常,如果有异常就失败,反之成功。

还有个 \Illuminate\Queue\Events\JobQueued 事件。


具体说一下吧,因为 Jobs::dispatch 会返回一个 \Illuminate\Foundation\Bus\PendingDispatch 实例,会在这个实例的析构函数中派发任务,但是一般情况下,如果你没有将 Jobs::dispatch 存成变量,那他就没有引用,会被回收,但是回收不是立即执行的,而是根据策略进行回收。

如果你想要立即触发的话,的话,你可以使用类似于下面的方式。

$job = Jobs::dispatch();
unset($job);

这样子会触发立即回收(调用析构函数,派发任务)

或者,你也可以手动派发 😮

app(\Illuminate\Contracts\Bus\Dispatcher::class)->dispatch($task);
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容