Laravel5.5 隊列使用Redis驅動

安裝predis

composer require "predis/predis:^1.1"

接下來我們還需要修改環境變量 QUEUE_DRIVER 的值爲 redis:

.env

QUEUE_DRIVER=redis

 

有時候隊列中的任務會失敗。

Laravel 內置了一個方便的方式來指定任務重試的最大次數。

當任務超出這個重試次數後,它就會被插入到 failed_jobs 數據表裏面。

使用 queue:failed-table 命令來創建 failed_jobs 表的遷移文件:

php artisan queue:failed-table

        

接着使用 migrate Artisan 命令生成 failed_jobs 表:

php artisan migrate

        

使用以下 Artisan 命令來生成一個新的隊列任務:

php artisan make:job QueueTest

        

該命令會在 app/Jobs 目錄下生成一個新的類:

app/Jobs/QueueTest.php

        

編寫隊列處理

        

調用 (在model層)

$data = ['uid' => 1];
$job = (new QueueTest($data, 1))->onQueue('QueueTest');
dd($this->dispatch($job));
QUEUE_DRIVER=sync

先改爲同步 測試一個程序有沒有問題

執行完畢,沒有問題 數據庫 isdel 字段已改變

改爲redis 測試延時隊列

$data = ['uid' => 1];

#延遲2分鐘執行 指定隊列QueueTest執行
$job = (new QueueTest($data, 1))->delay(now()->addMinutes(2))->onQueue('QueueTest');

dd($this->dispatch($job));

 打開一個窗口開始監聽

        

Redis 中新增一個key

        

裏面的score儲存的是命令執行的時間

2分鐘後

        

查看一下數據庫,已經修改了

        

使用redis驅動來 異步隊列完成!

 

遇到一個問題

使用   dispatch($job);  隊列並沒有執行

當在控制器中使用$this->dispatch($job); 可以執行

但是在模型層中使用$this->dispatch($job); 並沒有執行

想要在模型層中使用 $this->dispatch($job); 還需要

use DispatchesJobs;

 但是在官方文檔中 並沒有這樣調用 都是 dispatch($job); 

我的laravel版本是5.5 如果誰知道什麼原因 可以告訴我 謝謝。

d  ispatch($job) didispatch($job)spatch($job)

$data = ['uid' => 1];
$job = (new QueueTest($data, 1))->delay(now()->addMinutes(2))->onQueue('QueueTest');
dd(dispatch($job));

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章