queue:listen和queue:work 區(qū)別
queue:work 默認(rèn)只執(zhí)行一次隊(duì)列請求, 當(dāng)請求執(zhí)行完成后就終止;
queue:listen 監(jiān)聽隊(duì)列請求, 只要運(yùn)行著, 就能一直接受請求, 除非手動終止;
queue:work --daemon 同 listen 一樣, 只要運(yùn)行著, 就能一直接受請求, 不一樣的地方是在這個運(yùn)行模式下, 當(dāng)新的請求到來的時候, 不重新加載整個框架, 而是直接 fire 動作. 終端上不會顯示 Processed: SaveAvatorjob
能看出來, queue:work --daemon 是最高級的, 一般推薦使用這個來處理隊(duì)列監(jiān)聽.
注意: 使用 queue:work --daemon , 當(dāng)更新代碼的時候, 需要停止, 然后重新啟動, 這樣才能把修改的代碼應(yīng)用上.
php artisan queue:listen --queue=saveAvatorQueue? --tries=3 監(jiān)聽某個隊(duì)列
常用命令
php artisan queue:work --queue=saveAvatorQueue
只把已經(jīng)推送(push)的隊(duì)列里執(zhí)行一次 名稱為saveAvatorQueue隊(duì)列新锈。
執(zhí)行成功終端會輸出Processed: SaveAvatorjob
php artisan queue:work --queue=saveAvatorQueue --daemon?
后臺一直監(jiān)聽 名稱為saveAvatorQueue隊(duì)列的任務(wù)帜乞,會一直監(jiān)聽钱反,代碼改變后需要重新執(zhí)行該命令。
執(zhí)行成功終端不會輸出任何東西
php artisan queue:listen --queue=saveAvatorQueue
一直監(jiān)聽名稱為saveAvatorQueue隊(duì)列的任務(wù)
執(zhí)行成功終端會輸出Processed: SaveAvatorjob
php artisan queue:listen
一直監(jiān)聽所有push到隊(duì)列的任務(wù)
自我發(fā)現(xiàn):
1枯冈、當(dāng)給隊(duì)列命名后 不指定 --queue=saveAvatorQueue ,就不會被監(jiān)聽蚓胸,切記
2菩佑、如果在終端里執(zhí)行 php artisan queue:listen,若報錯后會一直執(zhí)行報錯剑逃,需要再加上 --tries=3(嘗試3次)
一些命令及解釋
?php artisan queue:listen --queue CreateXmlQueue --memory=4096 --timeout=6000
可以指定監(jiān)聽器使用哪個隊(duì)列連接
?php artisan queue:listen connection
可以設(shè)置每個任務(wù)允許運(yùn)行的最大時間(以秒為單位)
?php artisan queue:listen --timeout=60
可以指定輪詢新任務(wù)之前的等待時間(以秒為單位):
?php artisan queue:listen --sleep=5
可以在queue:listen命令上使用--tries開關(guān)來指定任務(wù)最大可嘗試執(zhí)行次數(shù):
php artisan queue:listen connection-name --tries=3
Supervisor配置
Supervisor為Linux操作系統(tǒng)提供的進(jìn)程監(jiān)視器浙宜,將會在[失敗](http://laravelacademy.org/tags/%e5%a4%b1%e8%b4%a5)時自動重啟queue:listen
或queue:work
命令,要在Ubuntu上安裝Supervisor蛹磺,使用如下命令:
? ?sudo apt-get install supervisor
Supervisor配置文件通常存放在/etc/supervisor/conf.d目錄粟瞬,在該目錄中,可以創(chuàng)建多個配置文件指示Supervisor如何監(jiān)視進(jìn)程萤捆,例如裙品,讓我們創(chuàng)建一個開啟并監(jiān)視queue:work進(jìn)程的laravel-worker.conf文件:
```
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/forge/app.com/artisan queue:work sqs --sleep=3 --tries=3 --daemon
autostart=true
autorestart=true
user=forge
numprocs=8
redirect_stderr=true
stdout_logfile=/home/forge/app.com/worker.log
```
在本例中俗批,numprocs指令讓Supervisor運(yùn)行8個queue:work進(jìn)程并監(jiān)視它們,如果失敗的話自動重啟市怎。配置文件創(chuàng)建好了之后岁忘,可以使用如下命令更新Supervisor配置并開啟進(jìn)程:
```
sudo supervisord -c /etc/supervisord.conf
sudo supervisorctl -c /etc/supervisor/supervisord.conf
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
```