Verwenden Sie den Supervisor, um die Jobs in der Warteschlange zu überwachen,
php artisan queue:listen --timeout=0
Verwenden
php artisan queue:failed-table
Der fehlgeschlagene Warteschlangendatensatz wurde erstellt, aber die aktuelle Situation ist, dass der fehlgeschlagene Datensatz immer wiederholt ausgeführt und nicht in failed_job geschrieben wird
In der Laravel-Dokumentation
php artisan queue:listen connection-name --tries=3
Worauf bezieht sich der Verbindungsname?
php artisan queue:listen --timeout=0 --tries=3, Warteschlangenausführungsfehler
exception 'Swift_TransportException' with message 'Expected response code 250 but got code "", with message ""'
Wie kann man diese Probleme lösen?
在laravel中可以选择多种队列服务,常见的有redis和beanstalk,由于redis是单纯的db,数据完全透明所以这里用redis作为讲解对象会更加好理解。
laravel中队列的启动方式有
queue:listen
和queue:work
, 其中queue:work
表示单独运行下一个job. 关于区别请看:queue:listen 和 queue:work --daemon 的区别 。queue:listen
内部也是一次次的调用queue:work
实现的,现在我们来看work
命令。在
Illuminate\Queue\Console\WorkCommand
中是不是看见了我们熟悉的fire
方法?对就是它。继续追,调用
runWork
方式查找job并且执行.这里有一个daemon
选项, 表示是否作为守护运行。直接将daemon认为false(因为daemon其实就是一个while(true) ):joy:。看到
runWork
其实是调用的Illuminate\Queue\Worker::pop
方法到了最终执行job的位置(删掉了空行和注释,因为我要来上蹩脚的中文注释了.(逃 ):
恩,差不多就是这么回事了。
你那个抛出来的
Swift_TransportException
是发送邮件程序swiftmailer
抛出的错误config/queue.php里的connections配置中,sync,beanstalkd,sqs等就是那个connection-name。