gpt4 book ai didi

php - 队列 worker 的 Laravel 异常处理程序

转载 作者:可可西里 更新时间:2023-11-01 00:30:02 26 4
gpt4 key购买 nike

我在 beanstalkd 作业类中抛出异常时遇到了一个奇怪的问题。当我在作业类外抛出一个简单的异常(throw new\Exception();)时,它会调用 App\Exceptions\Handler 中的 report() 方法,我可以在那里进行调整。但是当我在作业类中抛出异常时,它不会调用 report() 方法。所有队列实现都基于 laravel 文档(https://laravel.com/docs/5.1/queues)并且效果很好。这可能是什么原因?任何帮助将不胜感激。

最佳答案

嗯,对于队列来说,它必须是不同的。如果作业失败(抛出异常),您不想将控制权交给异常处理程序 - 您想要捕获错误并将作业标记为失败。

查看 Worker.php(第 294+ 行):

protected function raiseExceptionOccurredJobEvent($connection, Job $job, $exception)
{
if ($this->events) {
$data = json_decode($job->getRawBody(), true);

$this->events->fire(new Events\JobExceptionOccurred($connection, $job, $data, $exception));
}
}

另见第 201-223 行的 process()

Laravel 会捕获异常,但会触发一个事件让你知道出现了问题。如果您需要连接到它——只需监听此事件即可。

关于php - 队列 worker 的 Laravel 异常处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37686706/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com