Laravel 隊列使用

Laravel 隊列使用

1.修改根目錄

.env 文件的 **QUEUE_CONNECTION **字段配置爲 databasephp

Laravel可配置多種隊列驅動,包括 "sync", "database", "beanstalkd", "sqs", "redis", "null"(具體參見app/config/queue.php)
其中sync爲同步,database爲使用數據庫,後面三種爲第三方隊列服務,最後一種爲不使用隊列。mysql

image-20210114110302367

該位置具體是什麼請查看app/queuelaravel

image-20210114110110447

2.建立數據庫隊列表(database方式)

爲了使用 database 隊列驅動,你須要一張數據表來存儲任務。redis

php artisan queue:table

生產一張隊列表sql

php artisan migrate

mysql版本5.7.7如下可能會報以下錯誤數據庫

image-20210114103312698

解決方案網絡

打開app/Providers/AppServiceProvider文件,在boot方法中加入以下代碼,刪除數據庫中已經生成的遷移數據表,再次運行就能夠成功。app

必定要刪除已經生成的job數據表,否者彙報以下錯誤ide

image-20210114104119413

\Schema::defaultStringLength(191); //add fixed sql

數據庫最終效果測試

image-20210114104215137

3.生成任務類

在你的應用程序中,隊列的任務類都默認放在 app/Jobs 目錄下。

若是這個目錄不存在,那當你運行 make:job Artisan 命令時目錄就會被自動建立。

你能夠用如下的 Artisan 命令來生成一個新的隊列任務:

php artisan make:job SetLog

image-20210114104708075

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') . "進入了系統");
}

這時,因爲隊列還沒開啓,數據庫的隊列表中會有一個任務,等待隊列啓動後執行

image-20210114105632887

6.執行命令開啓隊列

php artisan queue:work

  這時,隊列表中的任務執行後就會自動刪除了,相似消費了任務

image-20210114105849527

image-20210114110429097

以上是拋轉引玉的一個簡單例子,具體細節能夠查看laravel的隊列文檔

相關文章
相關標籤/搜索