安装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));
Laravel队列使用Redis驱动实践与问题
本文介绍了Laravel队列使用Redis驱动的实践过程,包括安装predis、修改环境变量、处理失败任务、创建队列任务、编写队列处理等。还进行了同步和延时队列测试,最终完成异步队列。不过在模型层使用队列时遇到问题,在控制器中可执行,模型层却不行。
714

被折叠的 条评论
为什么被折叠?



