安裝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));