在Beanstalk作业类中抛出异常时,我遇到了一个奇怪的问题。当我在作业类之外抛出一个简单的异常(throw new \Exception();
)时,它调用App\Exabuts\HANDLE中的RePoT()方法,我可以在那里做我的调整。但是当我在job类中抛出异常时,它不会调用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将捕获异常,但将触发一个事件,让您知道出现了问题。如果你需要融入其中-听这个事件。