關於佇列的一些步驟
佇列主要用於一些預發事件的處理,比如期望在今天凌晨的時候處理的事情,就可以用到佇列
一 佇列的相關命令列
生成佇列所需要的表,注意:執行前先看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 協議》,轉載必須註明作者和本文連結