溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Laravel中如何使用消息隊列

發布時間:2021-07-19 14:42:19 來源:億速云 閱讀:221 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關Laravel中如何使用消息隊列,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

一、執行失敗重試次數設置

一定要設置任務執行失敗重試次數,避免無限失敗重試,超過重試次數 Laravel 會默認寫到失敗任務表中,也可以自己寫執行失敗后續處理邏輯。

php artisan queue:work redis --tries=3

需要先執行以下命令創建數據表:

php artisan queue:failed-table
php artisan migrate

二、程序異常的處理

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

這里的異常是指程序執行過程中發生的異常,不是指常駐進程掛掉,程序異常不一定導致常駐進程中斷,況且進程中斷有 Supervisor 監控并重啟。

如捕獲異常代碼片段:

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 寫隊列的數據結構

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

Laravel中如何使用消息隊列 

value 內容如下:

{
 "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
}

以上就是Laravel中如何使用消息隊列,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女