Laravel5.5 队列使用Redis驱动

    xiaoxiao2022-07-04  149

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

    最新回复(0)