redis-queue消息队列组件 消费没有生效,请问是什么原因?

李天宇

按照手册去做,下载安装 粘贴代码

运行以后在redis客户端里可以看到消息投递成功了,但是在消费里面打印得日志没有任何东西,是不是没有消费成功,可是也没有任何报错,搞不懂问题出在哪里

配置代码

<?php
return [
    'default' => [
        'host' => 'redis://120.0.0.1:6379',
        'options' => [
            'auth' => '',       // 密码,字符串类型,可选参数
            'db' => 0,            // 数据库
            'prefix' => '',       // key 前缀
            'max_attempts'  => 5, // 消费失败后,重试次数
            'retry_seconds' => 5, // 重试间隔,单位秒
        ]
    ],
];
<?php
return [
    'consumer'  => [
        'handler'     => Webman\RedisQueue\Process\Consumer::class,
        'count'       => 8, // 可以设置多进程同时消费
        'constructor' => [
            // 消费者类目录
            'consumer_dir' => app_path() . '/queue/redis'
        ]
    ]
];

投递代码

<?php
namespace app\controller;

use support\Request;
use support\Log;
use Webman\RedisQueue\Redis;

class Index
{
    public function queue(Request $request)
    {
        // 队列名
        $queue = 'send-mail';
        // 数据,可以直接传数组,无需序列化
        $data = ['to' => 'tom@gmail.com', 'content' => 'hello'];
        // 投递消息
        Redis::send($queue, $data);
        // 投递延迟消息,消息会在60秒后处理
        // Redis::send($queue, $data, 10);

        return response('redis queue test');
    }
}

消费代码

<?php

namespace app\queue\redis;

use support\Log;
use Webman\RedisQueue\Consumer;

class MyMailSend implements Consumer
{
    // 要消费的队列名
    public $queue = 'send-mail';

    // 连接名,对应 plugin/webman/redis-queue/redis.php 里的连接`
    public $connection = 'default';

    // 消费
    public function consume($data)
    {
        // 无需反序列化
        Log::info($data); // 输出 ['to' => 'tom@gmail.com', 'content' => 'hello']
    }
}

1360 4 0
4个回答

李天宇

投递消息方法执行后 redis客户端里就有数据了,但是消费方法里得日志却是什么都没有记录,不清楚怎么回事

  • 稚出 2022-10-13

    你先在消费那里打印一下看看

  • chenh 2022-10-13

    php start.php start后 看下redis消费队列是否正常启动

  • 李天宇 2022-10-13

    好像是没啥变化啊,我启动没看到有啥redis启动成功得提示

  • 稚出 2022-10-13

    打开调试模式截图

抽不完的寂寞
Log::info($data)

$data是数组,Log::info()不能传数组,报错了没消费成功

  • 李天宇 2022-10-13

    我修改了这里,但是日志里什么都没有,感觉根本没有走这里

  • 抽不完的寂寞 2022-10-13

    你确认你启动消费进程了?启动界面截图下呢

  • 李天宇 2022-10-13

    重启了下,确实没有启动消费进程,消费进程配置代码 是直接在 vendor文件下 webman/redis-queue/src/config/plugin/webman/redis-queue/process.php中 不知道是不是在这里 所以才启动不了

  • 抽不完的寂寞 2022-10-13

    文档都说了在 config/plugin/webman/redis-queue/process.php 里配置,搞不懂你为啥去vendor里改东西

  • 李天宇 2022-10-14

    问题是config/plugin/webman/redis-queue/process.php 这个路径我安装得框架 只有vendor里面才有 框架里得config下 没有/plugin/webman/redis-queue/ 这个些目录 直接就是 process.php

  • 抽不完的寂寞 2022-10-14

    我这正常,我猜测有可能你的composer版本太低了,没生成那些目录

  • 李天宇 2022-10-14

    嗯,我在本地从新下载了整个框架 安装redis-queue组件 现在出来那个目录了,配置完启动成功了,应该是我线上得版本太低造成得

咸鱼.php
  • powerbowen 2022-10-14

    我刚要发我的提问,大佬已经先贴上了

  • 李天宇 2022-10-14

    谢谢,我得问题是版本太低造成得,现在已经可以了

redis-queue有配置文件要启动要配置你关联的消费文件,不然你怎么消费```php
'consumer' => [
'handler' => Webman\RedisQueue\Process\Consumer::class,
'count' => 4, // 可以设置多进程同时消费
'constructor' => [
// 消费者类目录
'consumer_dir' => app_path() . '/queue'
]
]

  • 李天宇 2022-10-14

    嗯嗯,有写配置文件,我这个版本太了,所以出现问题,现在升级以后可以了

年代过于久远,无法发表回答
🔝