欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Laravel5.5 队列使用Redis驱动

程序员文章站 2022-05-19 18:17:22
...

安装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

         Laravel5.5 队列使用Redis驱动

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

php artisan migrate

         Laravel5.5 队列使用Redis驱动

使用以下 Artisan 命令来生成一个新的队列任务:

php artisan make:job QueueTest

         Laravel5.5 队列使用Redis驱动

该命令会在 app/Jobs 目录下生成一个新的类:

app/Jobs/QueueTest.php

         Laravel5.5 队列使用Redis驱动

编写队列处理

         Laravel5.5 队列使用Redis驱动

调用 (在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));

 打开一个窗口开始监听

         Laravel5.5 队列使用Redis驱动

Redis 中新增一个key

         Laravel5.5 队列使用Redis驱动

里面的score储存的是命令执行的时间

2分钟后

         Laravel5.5 队列使用Redis驱动

查看一下数据库,已经修改了

         Laravel5.5 队列使用Redis驱动

使用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));