【webman】redis-queue,延时队列不消费

深蓝

centos7.9,最新webman,按文档使用队列,内容如下,即时队列可以正常消费延时队列不能正常消费

正常的流程应该是当{redis-queue}-delayed里面的队列时间到指定的延长时间,就会将里面的数据转移到{redis-queue}-waiting里面,现在我的情况是{redis-queue}-waiting里面的均能正常消费,但是{redis-queue}-delayed的数据一直不处理。 plugin.webman.redis-queue.consumer这个进程是存在的,要不然也不会只消费即时队列的数据。

琢磨了一下午。有大神能指点一下吗?

队列投递

<?php

namespace app\rsapi\v2\controller;

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

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

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

队列消费

<?php

namespace app\queue\redis;

use Webman\RedisQueue\Consumer;

class TimeoutOrderQueue implements Consumer
{
    // 要消费的队列名
    public $queue = 'timeout_order_queue';

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

    // 消费
    public function consume($data)
    {
        // 无需反序列化
        var_export($data);
    }
}

最近我发现,这个类名和$queue的名称一定要对应,否则延迟队列不会生效,$queue是小写的方式。

2745 3 0
3个回答

walkor 打赏

redis-server版本是?

  • 深蓝 2023-05-09

    redis-server=6.2.4。

    我发现了问题的所在,我有二个消费。

    其中A消费的$connection='default',为本地redis连接。
    其中B消费的$connection='master',为远程redis连接。

    master连接是没有问题的,可以正常连接,因为我使用Redis::connection('master')->send($queue, $data);推送到远程redis,是可以查看到Zset的数据的。

    当我B消费的$connection='master'时,延时队列,将不能正常消费,即时消费的没问题。当我将master改为default时,延时消费和即时消费均可正常使用。

  • 深蓝 2023-05-09

    正常按道理,如果我的A消费连接的是default,跟B消费应该是不关联的。即使是连接质量问题导致连接失败,那也是B消费不能正常消费延时队列,为什么会导致我的A消费不能延时消费。

  • walkor 2023-05-09

    没有人反馈过类似问题,可能你哪里搞错了

  • 深蓝 2023-05-09

    我多搞几个环境再测试一下。然后再跟你反馈。

  • jinggge 2023-08-18

    我也遇到了。。。队列不会被消费了,redis里有这个{redis-queue}-waitingcommitOrder

  • 无法埋名 2024-04-19

    请问解决了吗,之前一直正常,最近发现有一个队列只要设置了delay就不执行

深蓝

解决了,不明所以,使用命令行生成的,就没有问题。
php webman redis-queue:consumer TimeoutOrder

  • 黑老怪 2023-05-10

    两台服务器时间不一致的时候也会出现相应问题,之前遇到过类似的

  • 深蓝 2023-05-10

    感谢提醒,使用命令行生成后正常,之前总出现莫名其妙的问题。

  • raingor00 2023-11-20

    我通过命令生成后还是不消费

  • 深蓝 2024-04-19

    不要使用windows,有很多莫名其妙的问题。

晚秋二三

我也遇见了相同的问题
本地开发环境 win11 有多个队列,order 队列使用的数据库是 8 ,本地开发延迟队列和即时队列都可正常执行
但是在部署到 linux 环境的时候,发现即时队列可以正常运行延迟队列没有跑,不知道什么问题,redis库也能看到 {redis-queue}-delayed zset数据

后续调整redis数据库为 6 就可以了,试了4和5都不行,没找到具体为啥,就先这样了...

redis-server版本是 6.0.8

  • 暂无评论
年代过于久远,无法发表回答
×
🔝