欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Laravel使用消息隊列需要注意的一些問題

 更新時間:2017年12月13日 10:26:51   作者:小談  
這篇文章主要給大家介紹了關(guān)于Laravel使用消息隊列需要注意的一些問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起看看吧。

前言

消息隊列對于大型的Web項目來說是必不可少的一個模塊,通過消息隊列可以解決大并發(fā)和多種語言通信接口等問題。對于大并發(fā)的問題,可以將耗時的任務(wù)或者不能同時大量并行的任務(wù)封裝起來傳輸?shù)较㈥犃兄校商幚沓绦虿粩鄰南㈥犃兄刑崛∠⒉⑦M(jìn)行處理,這樣通過消息隊列的緩沖可以使得在大并發(fā)情況下不再阻塞,如果性能不夠用還可以添加多個處理任務(wù)從消息隊列中獲取消息進(jìn)行處理。比如數(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ā)生的異常,不是指常駐進(jìn)程掛掉,程序異常不一定導(dǎo)致常駐進(jìn)程中斷,況且進(jìn)程中斷有 Supervisor 監(jiān)控并重啟。

如捕獲異常代碼片段:

try {
 $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) {
  info("sendMail fail:" . json_encode($result));
  $this->pushLog($task['id'], $task['mail_id'], implode(',', $userIds), json_encode($result), 0);
 } else {
  Log::warning("sendMail fail:" . json_encode($result));
  $this->pushLog($task['id'], $task['mail_id'], implode(',', $userIds), json_encode($result), $result['result']);
 }
} catch (RequestException $e) {
 Log::warning('RequestException' . $e->getMessage());
} catch (Exception $e) {
 Log::emergency('Exception' . $e->getMessage());
}

三、修改代碼記得重啟 Supervisor

最后一點,修改了處理隊列的程序,記得要重啟 Supervisor,否則腳本不會生效。

Laravel 往 Redis 寫隊列的數(shù)據(jù)結(jié)構(gòu)

隊列用 list 類型存儲,如圖:

 

value 內(nèi)容如下:

{
 "job": "Illuminate\\Queue\\CallQueuedHandler@call",
 "data": {
 "commandName": "App\\Jobs\\SendFile",
 "command": "O:17:\"App\\Jobs\\SendFile\":5:{s:23:\"\u0000App\\Jobs\\SendFile\u0000task\";a:8:{s:5:\"title\";s:4:\"1111\";s:4:\"note\";s:2:\"11\";s:6:\"reward\";s:0:\"\";s:7:\"mail_id\";s:5:\"66681\";s:4:\"nums\";i:20;s:8:\"uid_file\";s:33:\"uidfile\/file-66681-1513058185.txt\";s:5:\"gcids\";s:40:\"1B9DD95645AAE8119F7DA9B9FF738D52BC8A1BD5\";s:2:\"id\";i:29;}s:6:\"\u0000*\u0000job\";N;s:10:\"connection\";N;s:5:\"queue\";s:8:\"sendfile\";s:5:\"delay\";N;}"
 },
 "id": "l0mjsUthbxm4TgIJNUH13km9N8DIpErK",
 "attempts": 1
}

包含失敗重試次數(shù),隊列標(biāo)識,處理隊列的類,以及隊列的數(shù)據(jù)等等。

參考鏈接

Laravel 官方文檔 Queue 隊列:

https://laravel.com/docs/5.5/queues

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • PHP htmlspecialchars() 函數(shù)實例代碼及用法大全

    PHP htmlspecialchars() 函數(shù)實例代碼及用法大全

    這篇文章主要介紹了PHP htmlspecialchars() 函數(shù)實例代碼及用法大全,需要的朋友可以參考下
    2018-09-09
  • 基于PHP+mysql實現(xiàn)新聞發(fā)布系統(tǒng)的開發(fā)

    基于PHP+mysql實現(xiàn)新聞發(fā)布系統(tǒng)的開發(fā)

    這篇文章主要介紹了基于PHP+mysql實現(xiàn)新聞發(fā)布系統(tǒng)的開發(fā),文章通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下 面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • PHP之CI框架學(xué)習(xí)講解

    PHP之CI框架學(xué)習(xí)講解

    這篇文章主要介紹了PHP之CI框架學(xué)習(xí)講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 關(guān)于Yii中模型場景的一些簡單介紹

    關(guān)于Yii中模型場景的一些簡單介紹

    這篇文章主要給大家介紹了關(guān)于Yii中模型場景的一些簡單介紹,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Yii具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • laravel框架關(guān)于搜索功能的實現(xiàn)

    laravel框架關(guān)于搜索功能的實現(xiàn)

    本文是作者整理的關(guān)于laravel框架搜索功能的實現(xiàn)原理,并附上了詳細(xì)代碼,有需要的小伙伴請持續(xù)關(guān)注!
    2018-03-03
  • php支付寶APP支付功能

    php支付寶APP支付功能

    這篇文章主要為大家詳細(xì)介紹了php支付寶APP支付功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Yii中CGridView實現(xiàn)批量刪除的方法

    Yii中CGridView實現(xiàn)批量刪除的方法

    這篇文章主要介紹了Yii中CGridView實現(xiàn)批量刪除的方法,實例分析了CGridView的相關(guān)設(shè)置,前臺JS調(diào)用與后臺Action具體功能實現(xiàn)的技巧,需要的朋友可以參考下
    2015-12-12
  • Laravel Validator自定義錯誤返回提示消息并在前端展示

    Laravel Validator自定義錯誤返回提示消息并在前端展示

    這篇文章主要給大家介紹了關(guān)于Laravel Validator自定義錯誤返回提示消息并在前端展示的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Laravel具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Yii 2.0實現(xiàn)聯(lián)表查詢加搜索分頁的方法示例

    Yii 2.0實現(xiàn)聯(lián)表查詢加搜索分頁的方法示例

    這篇文章主要給大家介紹了關(guān)于利用Yii 2.0實現(xiàn)聯(lián)表查詢加搜索分頁的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • thinkPHP3.2.2框架行為擴(kuò)展及demo示例

    thinkPHP3.2.2框架行為擴(kuò)展及demo示例

    這篇文章主要介紹了thinkPHP3.2.2框架行為擴(kuò)展,結(jié)合實例形式分析了thinkPHP3.2.2框架行為擴(kuò)展原理、實現(xiàn)方法及相關(guān)操作注意事項,需要的朋友可以參考下
    2018-06-06

最新評論