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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值