我在beanstalkd作业类中抛出异常时遇到了一个奇怪的问题 . 当我在作业类之外抛出一个简单的异常( throw new \Exception();
)时,它调用App \ Exceptions \ Handler中的report()方法,我可以在那里进行调整 . 但是当我在作业类中抛出异常时,它不会调用report()方法 . 所有队列实现都基于laravel文档(https://laravel.com/docs/5.1/queues)并且运行良好 . 这可能是什么原因?任何帮助将受到高度赞赏 .
2 Answers
使用laravel 5.1时,当我使用
QUEUE_DRIVER=sync
时我遇到了同样的问题,当我将其更改为QUEUE_DRIVER=redis
并且异常处理程序开始执行它的工作时,我的意思是强制调用report()
方法 .一定要使用run start
artisan queue:work redis
with--daemon
嗯,队列必须有所不同 . 如果作业失败(抛出异常),您不希望将控件提供给异常处理程序 - 您希望捕获错误并将作业标记为失败 .
查看Worker.php(第294行):
请参阅第201-223行的
process()
.Laravel将捕获异常,但会触发一个事件,让您知道存在问题 . 如果您需要加入它 - 只需听取此事件 .