真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

laravel用隊列能解決什么問題

這篇“l(fā)aravel用隊列能解決什么問題”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“l(fā)aravel用隊列能解決什么問題”文章吧。

創(chuàng)新互聯(lián)公司2013年成立,先為郊區(qū)等服務(wù)建站,郊區(qū)等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為郊區(qū)企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

在laravel中,使用隊列可以解決大并發(fā)和多種語言通信接口等問題??梢詫⒑臅r的任務(wù)或者不能同時大量并行的任務(wù)封裝起來傳輸?shù)较㈥犃兄?,由處理程序不斷從消息隊列中提取消息并進行處理,這樣用過消息隊列就可以使得在大并發(fā)情況下不再堵塞。

本文操作環(huán)境:Windows10系統(tǒng)、Laravel6版、Dell G3電腦。

laravel為什么用隊列

消息隊列對于大型的Web項目來說是必不可少的一個模塊,通過消息隊列可以解決大并發(fā)和多種語言通信接口等問題。

對于大并發(fā)的問題,可以將耗時的任務(wù)或者不能同時大量并行的任務(wù)封裝起來傳輸?shù)较㈥犃兄校商幚沓绦虿粩鄰南㈥犃兄刑崛∠⒉⑦M行處理,這樣通過消息隊列的緩沖可以使得在大并發(fā)情況下不再阻塞,如果性能不夠用還可以添加多個處理任務(wù)從消息隊列中獲取消息進行處理。

比如數(shù)據(jù)庫的操作,當(dāng)對數(shù)據(jù)庫的讀、寫操作過多時就會存在鎖表等問題,讀的問題可以通過緩存等方案解決,寫的問題就需要消息隊列來解決。

而且,在大型的Web項目開發(fā)中,很多情況下不可能通過一種語言實現(xiàn),需要發(fā)揮不同語言的優(yōu)勢,比如PHP,雖然在理論意義上它可以做Web開發(fā)中的所有事情,但是有些問題用它解決效率將會非常低,比如實時socket連接和分布式事務(wù)處理等。

使用 Laravel 的消息隊列處理異步任務(wù),redis 作為隊列數(shù)據(jù)庫,Supervisor 監(jiān)控腳本異常中斷并自動重啟,這是 Laravel 處理隊列任務(wù)的標(biāo)準(zhǔn)流程,但是實際中可能還會出現(xiàn)各種各樣的問題,為了保證系統(tǒng)可靠性,還要注意幾個問題。

一、執(zhí)行失敗重試次數(shù)設(shè)置

一定要設(shè)置任務(wù)執(zhí)行失敗重試次數(shù),避免無限失敗重試,超過重試次數(shù) Laravel 會默認(rèn)寫到失敗任務(wù)表中,也可以自己寫執(zhí)行失敗后續(xù)處理邏輯。

php artisan queue:work redis --tries=3

需要先執(zhí)行以下命令創(chuàng)建數(shù)據(jù)表:

php artisan queue:failed-table

php artisan migrate

二、程序異常的處理

有時候程序執(zhí)行過程會發(fā)生異常,比如依賴其他接口,請求 HTTP 接口超時等等,如果不捕捉異常,那么當(dāng)前這個隊列就會中斷不能繼續(xù)運行下去,比如給 10000 個用戶推送內(nèi)容,需要依賴接口推送,如果中間的請求掛了就會影響到后面的推送。

這里的異常是指程序執(zhí)行過程中發(fā)生的異常,不是指常駐進程掛掉,程序異常不一定導(dǎo)致常駐進程中斷,況且進程中斷有 Supervisor 監(jiān)控并重啟。

如捕獲異常代碼片段:

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());
}

以上就是關(guān)于“l(fā)aravel用隊列能解決什么問題”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


標(biāo)題名稱:laravel用隊列能解決什么問題
文章位置:http://weahome.cn/article/goccgp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部