您好,登錄后才能下訂單哦!
這篇“laravel用隊列能解決什么問題”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“laravel用隊列能解決什么問題”文章吧。
在laravel中,使用隊列可以解決大并發和多種語言通信接口等問題。可以將耗時的任務或者不能同時大量并行的任務封裝起來傳輸到消息隊列中,由處理程序不斷從消息隊列中提取消息并進行處理,這樣用過消息隊列就可以使得在大并發情況下不再堵塞。
本文操作環境:Windows10系統、Laravel6版、Dell G3電腦。
消息隊列對于大型的Web項目來說是必不可少的一個模塊,通過消息隊列可以解決大并發和多種語言通信接口等問題。
對于大并發的問題,可以將耗時的任務或者不能同時大量并行的任務封裝起來傳輸到消息隊列中,由處理程序不斷從消息隊列中提取消息并進行處理,這樣通過消息隊列的緩沖可以使得在大并發情況下不再阻塞,如果性能不夠用還可以添加多個處理任務從消息隊列中獲取消息進行處理。
比如數據庫的操作,當對數據庫的讀、寫操作過多時就會存在鎖表等問題,讀的問題可以通過緩存等方案解決,寫的問題就需要消息隊列來解決。
而且,在大型的Web項目開發中,很多情況下不可能通過一種語言實現,需要發揮不同語言的優勢,比如PHP,雖然在理論意義上它可以做Web開發中的所有事情,但是有些問題用它解決效率將會非常低,比如實時socket連接和分布式事務處理等。
使用 Laravel 的消息隊列處理異步任務,Redis 作為隊列數據庫,Supervisor 監控腳本異常中斷并自動重啟,這是 Laravel 處理隊列任務的標準流程,但是實際中可能還會出現各種各樣的問題,為了保證系統可靠性,還要注意幾個問題。
一、執行失敗重試次數設置
一定要設置任務執行失敗重試次數,避免無限失敗重試,超過重試次數 Laravel 會默認寫到失敗任務表中,也可以自己寫執行失敗后續處理邏輯。
php artisan queue:work redis --tries=3
需要先執行以下命令創建數據表:
php artisan queue:failed-table
php artisan migrate
二、程序異常的處理
有時候程序執行過程會發生異常,比如依賴其他接口,請求 HTTP 接口超時等等,如果不捕捉異常,那么當前這個隊列就會中斷不能繼續運行下去,比如給 10000 個用戶推送內容,需要依賴接口推送,如果中間的請求掛了就會影響到后面的推送。
這里的異常是指程序執行過程中發生的異常,不是指常駐進程掛掉,程序異常不一定導致常駐進程中斷,況且進程中斷有 Supervisor 監控并重啟。
如捕獲異常代碼片段:
try {undefined $r = $client->request('POST', '', [ 'query' => [ 'client_name' => 'filemail', 'client_version' => '1.0', 'client_sequence' => 0, 'uid' => 692934013,//119481237 'r' => 1508312484, ], 'body' => \GuzzleHttp\json_encode($body), ]); $result = $r->getBody()->getContents(); $result = json_decode($result, true); if ($result['result'] == 0) {undefined info("sendMail fail:" . json_encode($result)); $this->pushLog($task['id'], $task['mail_id'], implode(',', $userIds), json_encode($result), 0); } else {undefined Log::warning("sendMail fail:" . json_encode($result)); $this->pushLog($task['id'], $task['mail_id'], implode(',', $userIds), json_encode($result), $result['result']); } } catch (RequestException $e) {undefined Log::warning('RequestException' . $e->getMessage()); } catch (Exception $e) {undefined Log::emergency('Exception' . $e->getMessage()); }
以上就是關于“laravel用隊列能解決什么問題”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。