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的隊列文檔