好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Laravel使用Queue隊列的技巧匯總

Laravel使用Queue隊列的技巧匯總

熱門標簽:廣州防封卡外呼系統多少錢一個月 江西手機自動外呼防封系統是什么 哪里辦理400電話 仁和怎么申請400開頭的電話 外呼系統撥打暫時無法接通 長春人工外呼系統服務商 廣東地市地圖標注 高德地圖標注家 怎么向銷售公司推銷外呼系統

前言

Laravel 隊列為不同的后臺隊列服務提供統一的 API,例如 Beanstalk,Amazon SQS,Redis,甚至其他基于關系型數據庫的隊列。隊列的目的是將耗時的任務延時處理,比如發送郵件,從而大幅度縮短 Web 請求和相應的時間。

隊列配置文件存放在 config/queue.php 。每一種隊列驅動的配置都可以在該文件中找到,包括數據庫,Beanstalkd ,Amazon SQS,Redis,以及同步(本地使用)驅動。其中還包含了一個 null 隊列驅動用于那些放棄隊列的任務

為什么使用隊列?

一般來說使用隊列是為了:

異步
重試

也許你還有其他的理由使用隊列,但是這應該是最基本的兩個原因。

什么情況使用隊列?

了解了為什么使用隊列,那么一般有這么幾類任務使用隊列:

耗時比較久的,比如上傳一個文件后進行一些格式的轉化等。

需要保證送達率的,比如發送短信,因為要調用別人的 api,總會有幾率失敗,那么為了保證送達,重試就必不可少了。
使用隊列的時候一定要想明白一個問題,這個任務到底是不是可以異步,如果因為異步會導致問題,那么就要放棄使用隊列。

驅動的必要設置

database.php

在 database.php 配置文件中對 redis 數據庫部分進行配置,默認有一個 default 連接,就用這個好了:)
根據這個默認連接中需要的配置項,編輯 .env 配置文件,將其中的 REDIS_HOST、REDIS_PASSWORD、REDIS_PORT 填寫成自己服務器中 Redis 的相應值。

queue.php

首先需要去 .env 中配置 QUEUE_DRIVER,因為現在打算用 Redis,所以配置成 redis。

接著配置 queue.php 里 connections 部分的 redis 連接,其中 connection 對應的值就是 database.php 中 redis 的那個 default 連接。

數據庫

要使用 database 這個隊列驅動的話,你需要創建一個數據表來存儲任務。你可以用 queue:table 這個 Artisan

php artisan queue:table

處理失敗的任務

有時候你隊列中的任務會失敗。不要擔心,本來事情就不會一帆風順。

Laravel 內置了一個方便的方式來指定任務重試的最大次數。當任務超出這個重試次數后,它就會被插入到 failed_jobs 數據表里面。要創建 failed_jobs 表的遷移文件,你可以用 queue:failed-table 命令,接著使用 migrate Artisan 命令生成 failed_jobs 表:

php artisan queue:failed-table

命令來創建這個數據表的遷移。當遷移創建好以后,就可以用 migrate 這條命令來創建數據表:

php artisan migrate

執行命令講解

php artisan queue:work --daemon --quiet --queue=default --delay=3 --sleep=3 --tries=3
--daemon

The queue:work Artisan command includes a --daemon option for forcing the queue worker to continue processing jobs without ever re-booting the framework. This results in a significant reduction of CPU usage when compared to the queue:listen command

總體來說,在 supervisor 中一般要加這個 option,可以節省 CPU 使用。

--quiet

不輸出任何內容

--delay=3

一個任務失敗后,延遲多長時間后再重試,單位是秒。這個值的設定我個人建議不要太短,因為一個任務失敗(比如網絡原因),重試時間太短可能會出現連續失敗的情況。

--sleep=3

去 Redis 中拿任務的時候,發現沒有任務,休息多長時間,單位是秒。這個值的設定要看你的任務是否緊急,如果是那種非常緊急的任務,不能等待太長時間。

--tries=3

定義失敗任務最多重試次數。這個值的設定根據任務的重要程度來確定,一般 3 次比較適合。

創建任務

生成任務類

在你的應用程序中,隊列的任務類都默認放在 app/Jobs 目錄下。如果這個目錄不存在,那當你運行 make:job Artisan 命令時目錄就會被自動創建。你可以用以下的 Artisan 命令來生成一個新的隊列任務:

php artisan make:job Demo

生成的類實現了 Illuminate\Contracts\Queue\ShouldQueue 接口,這意味著這個任務將會被推送到隊列中,而不是同步執行。

?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Log;

class Demo implements ShouldQueue
{
 use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

 public $param;
 /**
 * Create a new job instance.
 *
 * @return void
 */
 public function __construct($param = '')
 {
 $this->param = $param;
 }

 /**
 * Execute the job.
 *
 * @return void
 */
 public function handle()
 {
 Log::info('Hello, '.$this->param);
 }
}

控制器代碼

public function queue_demo()
{
 $num = rand(1,999999999);
 // 這個任務將被分發到默認隊列...
 DemoJob::dispatch($num);
}

開啟隊列

php artisan queue:work --queue=default

由于是本地,需要打開監聽,當訪問到接口時,就會觸發隊列中的任務

線上的話需要用到supervisor的配置

Supervisor 配置

安裝 Supervisor

Supervisor 是一個 Linux 操作系統上的進程監控軟件,它會在 queue:listen 或 queue:work 命令發生失敗后自動重啟它們。在 Ubuntu 安裝 Supervisor,可以用以下命令:

sudo apt-get install supervisor

{tip} 如果自己手動配置 Supervisor 聽起來有點難以應付,可以考慮使用 Laravel Forge,它能給你的 Laravel 項目自動安裝與配置 Supervisor。

配置 Supervisor

Supervisor 的配置文件一般是放在 /etc/supervisor/conf.d 目錄下。在這個目錄中你可以創建任意數量的配置文件來要求 Supervisor 怎樣監控你的進程。例如我們創建一個 laravel-worker.conf 來啟動與監控一個 queue:work 進程:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/forge/app.com/artisan queue:work sqs --sleep=3 --tries=3
autostart=true
autorestart=true
user=forge
numprocs=8
redirect_stderr=true
stdout_logfile=/home/forge/app.com/worker.log

這個例子里的 numprocs 命令會要求 Supervisor 運行并監控 8 個 queue:work 進程,并且在它們運行失敗后重新啟動。當然,你必須更改 command 命令的 queue:work sqs ,以顯示你所選擇的隊列驅動。

啟動 Supervisor 當這個配置文件被創建后,你需要更新 Supervisor 的配置,并用以下命令來啟動該進程:

sudo supervisorctl reread

sudo supervisorctl update

sudo supervisorctl start laravel-worker:*

更多有關 Supervisor 的設置與使用,請參考 Supervisor 官方文檔

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • laravel5.6 框架郵件隊列database驅動簡單demo示例
  • Docker部署Laravel應用實現隊列&任務調度
  • Laravel 6 將新增為指定隊列任務設置中間件的功能
  • Laravel 隊列使用的實現
  • Laravel框架隊列原理與用法分析
  • Laravel中為什么不使用blpop取隊列詳析
  • 關于 Laravel Redis 多個進程同時取隊列問題詳解
  • 源碼分析 Laravel 重復執行同一個隊列任務的原因
  • Laravel使用消息隊列需要注意的一些問題
  • Laravel中利用隊列發送郵件的方法示例
  • 淺談Laravel隊列實現原理解決問題記錄
  • 淺析Laravel5中隊列的配置及使用
  • PHP的Laravel框架中使用消息隊列queue及異步隊列的方法
  • Laravel 4.2 中隊列服務(queue)使用感受
  • Laravel框架中隊列和工作(Queues、Jobs)操作實例詳解

標簽:梅河口 黔東 惠州 文山 湘西 廈門 濮陽 海北

巨人網絡通訊聲明:本文標題《Laravel使用Queue隊列的技巧匯總》,本文關鍵詞  Laravel,使用,Queue,隊列,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Laravel使用Queue隊列的技巧匯總》相關的同類信息!
  • 本頁收集關于Laravel使用Queue隊列的技巧匯總的相關信息資訊供網民參考!
  • 推薦文章