一.設置存儲方式
在config/queue.php中查看隊列驅動,在.env 設置【QUEUE_DRIVER】
主要介紹數據庫驅動
二.數據庫驅動
1.修改.env
CACHE_DRIVER=file // 這個值按理不會影響隊列使用,但測試的時候發現,這個值設為redis,且redis服務未啟動,在執行php artisan queue:work會出現連接redis失敗的錯誤,因此當QUEUE_DRIVER不為redis時,CACHE_DRIVER也不能為redis。原因不明 QUEUE_DRIVER=database
2.創建job表
php artisan queue:table
php artisan migrate
我在重新測試的時候,執行php artisan queue:table
報錯:include(\vendor\composer/../../database/migrations/2017_03_31_165417_create_jobs_table.php,
解決:composer dump-autoload
3.創建任務文件
php artisan make:job insertJob
查看生成的文件:app\Jobs\InsertJob.php
<?php namespace App\Jobs; use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Support\Facades\DB; class InsertJob implements ShouldQueue { use InteractsWithQueue, Queueable, SerializesModels; /** * Create a new job instance. * * @return void */ public function __construct(){} /** * 執行任務代碼 * * @return void */ public function handle() { DB::table('comments')->insert(['content'=>'測試任務']); } }
4.在控制器中調用任務
app\Http\Controllers\TestJobController.php
<?php namespace App\Http\Controllers; use Carbon\Carbon; use App\Jobs\InsertJob; class TestJobController extends Controller { public function testJob() { // 表示一分鍾后執行任務 $job = (new InsertJob())->delay(Carbon::now()->addMinute(1)); dispatch($job); } }
訪問相應路由后,在jobs表會生成一條待執行任務的數據:
5.啟用任務隊列
php artisan queue:work
一分鍾后出現:

說明執行成功,jobs表中的任務數據被刪除,comments表新增了一條數據
6.如果只是先把任務放入隊列,之后再手動執行任務(可以和定時任務配合使用)
$job = (new SendReminderEmail())->onQueue('high'); dispatch($job);
php artisan queue:work --queue=high,low #指定要執行的隊列名
三.redis驅動,流程和數據庫驅動一樣,只是不用建表,不詳敘
