使用supervisor监听队列的job,
php artisan queue:listen --timeout=0
使用
php artisan queue:failed-table
建立了失败的队列记录,但是现状是失败的总是在重复执行,并没有写入到failed_job
laravel文档中有
php artisan queue:listen connection-name --tries=3
connection-name指的是什么?
php artisan queue:listen --timeout=0 --tries=3时,队列执行报错
exception 'Swift_TransportException' with message 'Expected response code 250 but got code "", with message ""'
这些问题该怎么解决?
在laravel中可以选择多种队列服务,常见的有redis和beanstalk,由于redis是单纯的db,数据完全透明所以这里用redis作为讲解对象会更加好理解。
laravel中队列的启动方式有
queue:listen
和queue:work
, 其中queue:work
表示单独运行下一个job. 关于区别请看:queue:listen 和 queue:work --daemon 的区别 。queue:listen
内部也是一次次的调用queue:work
实现的,现在我们来看work
命令。在
IlluminateQueueConsoleWorkCommand
中是不是看见了我们熟悉的fire
方法?对就是它。继续追,调用
runWork
方式查找job并且执行.这里有一个daemon
选项, 表示是否作为守护运行。直接将daemon认为false(因为daemon其实就是一个while(true) ):joy:。看到
runWork
其实是调用的IlluminateQueueWorker::pop
方法到了最终执行job的位置(删掉了空行和注释,因为我要来上蹩脚的中文注释了.(逃 ):
恩,差不多就是这么回事了。
你那个抛出来的
Swift_TransportException
是发送邮件程序swiftmailer
抛出的错误config/queue.php里的connections配置中,sync,beanstalkd,sqs等就是那个connection-name。