項目中經常會有背景運作任務的需求
一、異步處理
比如發送郵件時,因為要連接配接郵件伺服器,往往需要5-10秒甚至更長時間,如果能先給使用者一個成功的提示資訊,然後在背景慢慢處理發送郵件的操作,顯然會有更好的使用者體驗。或者發送短信
二、日志處理
日志處理是指将消息隊列用在日志進行中,可以解決大量日志傳輸的問題
laravel中執行隊列的步驟:
1、php artisan make:job autionBid
生成的檔案,如圖所示

2、結構方法可以進行傳參數,handel方法裡,可以寫執行的邏輯,如圖所示
handle方法在任務被隊列處理的時候被調用,注意我們可以在任務的handle方法中進行依賴注入。Laravel服務容器會自動注入這些依賴。
3、推送任務到隊列中
在需要執行此方法的裡頭,執行
$this->dispatch(new autionBid(參數));
這樣隊列就被推送成功
4、隊列監聽
php artisan queue:listen
這樣隊列自動監聽,有時候隊列會停止,為了維護隊列程序,使用supervisor進行監聽隊列
5、在config/queue.php ,這是redis隊列
6、supervisor
項目中遇到有些腳本需要通過背景程序運作,保證不被異常中斷,之前都是通過nohup、&、screen來實作, Supervisor是用Python開發的一套通用的程序管理程式,能将一個普通的指令行程序變為背景daemon,并監控程序狀态,異常退出時能自動重新開機。它是通過fork/exec的方式把這些被管理的程序當作supervisor的子程序來啟動,這樣隻要在supervisor的配置檔案中,把要管理的程序的可執行檔案的路徑寫進去即可。也實作當子程序挂掉的時候,父程序可以準确擷取子程序挂掉的資訊的,可以選擇是否自己啟動和報警。supervisor還提供了一個功能,可以為supervisord或者每個子程序,設定一個非root的user,這個user就可以管理它對應的程序。
https://blog.tanteng.me/2017/01/supervisor-laravel-queue/
http://laravelacademy.org/post/3252.html
https://www.jianshu.com/p/445ef6820753
https://lvwenhan.com/laravel/395.html
https://www.cnblogs.com/wswang/p/5795766.html