天天看點

Laravel 新篇章(1):使用隊列

1、在.env檔案中進行配置(預設為異步,資料庫)

QUEUE_CONNECTION=database      

2、生成隊清單

php artisan queue:table      

執行

php artisan migrate      

3、資料庫中會生成jobs和failed_jobs兩張表

jobs存放未執行的隊列

failed_jobs存放執行失敗的隊列

4、生成Job類(位于app\Jobs\SendEmailJob.php)

php artisan make:job SendEmailJob      

編輯(在handle裡面寫業務邏輯,比如發送郵件、發送短信、發送微信模闆消息)

namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class SendEmailJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    private $email;
   public function __construct($email)
    {
        $this->email = $email;
    }
    public function handle()
    {      
         Email::send($this->email);
    }
    
}      

5、在業務邏輯中使用(比如向所有使用者發送優惠資訊郵件)

foreach(User::select(['email'])->pluck('email')->toArray() as $email){
    dispatch(SendEmailJob($email));
}      

注:此步并不會發送郵件,隻是把發送郵件添加到隊列裡面,此時打開jobs表,會發現記錄

6、運作隊列

php artisan queue:work      

隊列開始執行,當隊列執行完畢時,jobs表為空,如果有執行失敗的條目,将會存到failed_jobs表裡面

此外,可用supervison守護程序

7、寶塔面闆使用supervison守護隊列程序

7.1、寶塔面闆-軟體-supervison-安裝

7.2、打開,添加守護程序

名稱:test

啟動使用者:root或者www

運作目錄:/www/wwwroot/abc.com    (項目根目錄)

啟動指令:/www/server/php/74/bin/php artisan queue:work

程序數量:1

7.3、點選建立,會自動啟動該指令