laravel的佇列

小胖子呀萌萌噠發表於2021-01-13

關於佇列的一些步驟

佇列主要用於一些預發事件的處理,比如期望在今天凌晨的時候處理的事情,就可以用到佇列

一 佇列的相關命令列

生成佇列所需要的表,注意:執行前先看mysql表是否有相應的表格==》jobs

#生成所需要的表jobs
php artisan queue:table
#將生成的表jobs在資料庫中實現
php artisan migrate

生成佇列檔案,注意:此命令列會生成app/jobs/JPushQueue.php,只需要在此檔案下增加相應的邏輯即可

#生成佇列檔案,在目錄 app/Jobs 下
php artisan make:job JPushQueue

重啟佇列,注意:由於佇列是掛在定時任務裡的程式,他在執行的過程中並不會注意到你的程式碼的修改,只有重啟佇列後,才可以重新載入新加入的佇列邏輯

#重啟佇列
php artisan queue:restart

開啟佇列監聽,注意:開啟監聽用於本地測試,線上程式碼結合console管理

#開啟佇列監聽
php artisan queue:work

console管理

#將任務加入伺服器的定時函式管理
crontab -e
#定時函式管理指令碼里增加以下語句,注意/path-to-your-project 是你的專案路徑
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

同時在App\Console\Kernel.php 中增加你的job任務監聽命令

/* jPush的定時任務 */
$schedule->job(new JPushQueue())->everyMinute();

二 佇列的相關程式碼和檔案

JPushQueue檔案的相關操作
當生成JPushQueue檔案後,需要在對應的檔案中增加相關的佇列邏輯,命令列生成的job在目錄App\Jobs下,此目錄會增加一個檔案JPushQueue.php,可以修改增加相關邏輯,如下所示:

<?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;

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

    /**
     * 任務可嘗試最大次數
     *
     * @var int
     */
    public $tries = 5;

    /**
     * 如果模型缺失即刪除任務
     *
     * @var bool
     */
    public $deleteWhenMissingModels = true;

    protected $paramData;

    /** 
     * Create a new job instance.引數注入的邏輯放在這裡
     * @param array $paramData
     * @return void
     */
    public function __construct($paramData = [])
    {
        $this->paramData = $paramData;
    }

    /**
     * Execute the job.
     * @return bool
     * @throws \Exception
     */
    public function handle()
    {
        //相關推送邏輯,此處增加你的相關邏輯即可

        return true;
    }

    /**
     * 任務失敗的處理過程
     *
     * @param \Exception $exception
     */
    public function failed(\Exception $exception)
    {
        //
    }
}

佇列的使用
你可以在你的程式碼中使用佇列的方法,這裡主要用於延遲傳送訊息。

use App\Jobs\JPushQueue;

$param_data = [];
//推送用佇列的方式
JPushQueue::dispatch($param_data)->delay(now()->addSeconds(1));

注意:並不是傳送佇列後就能成功執行佇列中的邏輯,你需要按照步驟一,過載佇列任務,開啟佇列監聽

再次感謝我的leader,給我足夠的空閒時間來慢慢看文件寫邏輯,希望每天都這麼空閒

本作品採用《CC 協議》,轉載必須註明作者和本文連結
我家有貓了

相關文章