Laravel 佇列使用
1.修改根目錄
.env 檔案的 **QUEUE_CONNECTION **欄位配置為 database
Laravel可配置多種佇列驅動,包括 "sync", "database", "beanstalkd", "sqs", "redis", "null"(具體參見app/config/queue.php)
其中sync為同步,database為使用資料庫,后面三種為第三方佇列服務,最后一種為不使用佇列,

該位置具體是什么請查看app/queue

2.創建資料庫隊串列(database方式)
為了使用 database 佇列驅動,你需要一張資料表來存盤任務,
php artisan queue:table
生產一張隊串列
php artisan migrate
mysql版本5.7.7以下可能會報如下錯誤

解決方案
打開app/Providers/AppServiceProvider檔案,在boot方法中加入如下代碼,洗掉資料庫中已經生成的遷移資料表,再次運行就可以成功,
一定要洗掉已經生成的job資料表,否者匯報如下錯誤

\Schema::defaultStringLength(191); //add fixed sql
資料庫最終效果

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

4.在佇列類里面的handle方法中寫上業務邏輯(比如發送網路請求,發送郵件等等,這里簡單寫個日志代替)
protected $message;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($message)
{
$this->message = $message;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
\Log::info($this->message);
}
5.在控制器中加入一個測驗方法,直接呼叫佇列類的 dispatch方法,類似生產了一個任務
public function index(Request $request){
SetLog::dispatch(date('Y-m-d H:i:s') . "進入了系統");
}
這時,由于佇列還沒開啟,資料庫的隊串列中會有一個任務,等待佇列啟動后執行

6.執行命令開啟佇列
php artisan queue:work
這時,隊串列中的任務執行后就會自動洗掉了,類似消費了任務



以上是拋轉引玉的一個簡單例子,具體細節可以查看laravel的佇列檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/248865.html
標籤:PHP
上一篇:優雅地創建未定義類PHP物件
