使用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。