Laravel --- Laravel 5.3 隊列使用方法


一.設置存儲方式

  在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驅動,流程和數據庫驅動一樣,只是不用建表,不詳敘

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM