redis队列配置中如何配置指定类执行,而不是指定文件夹

skating

问题描述

官网文档中,对于redis队列的配置举例是

return [
    'redis_consumer_fast'  => [ // key是自定义的,没有格式限制,这里取名redis_consumer_fast
        'handler'     => Webman\RedisQueue\Process\Consumer::class,
        'count'       => 8,
        'constructor' => [
            // 消费者类目录
            'consumer_dir' => app_path() . '/queue/redis/fast'
        ]
    ],
    'redis_consumer_slow'  => [  // key是自定义的,没有格式限制,这里取名redis_consumer_slow
        'handler'     => Webman\RedisQueue\Process\Consumer::class,
        'count'       => 8,
        'constructor' => [
            // 消费者类目录
            'consumer_dir' => app_path() . '/queue/redis/slow'
        ]
    ]
];

这个是分文件夹的,会自动扫描文件夹。
现在我有一个需求是将用户进行了分组,然后每个用户的一些操作是分配到指定的队列里面去的,而且这个队列不能有多个进程同时监听执行,避免出现用户在redis里面的前后操作,被不同进程同时执行了的情况。
同时我也期望我指定某个类来执行这个队列。此时我该如何进行配置。或者我可以查看哪个地方的代码来知道如何配置。

还请大佬们指教。

125 1 0
1个回答

nitron

指定某个类来执行这个队列不就是在Consumer里设置$queue的值么

class YourConsumer implements Consumer
{
    // 要消费的队列名
    public $queue = '指定要消费的队列名';

    //.....
}

至于最前面的问题,我看不明白,就算多进程同时监听同一个队列,一个任务只会被一个消费者消费,不会出现一个任务同时被两个消费进程消费的情况(前提:同一个队列)

  • skating 3天前

    我举个例子,如果是把消费队列都放在同一个目录下面,加入目录下面有一个UserLoginLog.php 用户登录日志消费者。这个消费目录启动的进程个数是8个,那么如果在我在向UserLoginLog.php队列里面插入数据的时候,如果数据很多,当进程1读取到了用户1的信息的时候,进程2可能也会读取到用户2的信息,此时谁先写入这个就不一定是1先写入了,那么写入的数据的顺序就错乱了。

    我说的指定某个类就是,我的配置里面不要指定某个文件夹

  • skating 3天前

    读取的顺序是优先后的,但是执行的时间可能会不一定会是先读取到就先执行完

  • nitron 3天前

    1,那就只开一个进程,MPSC
    2.自己实现分发器

  • tanhongbin 2天前

    也可以试试composer require thb\redis 这个就是指定到类的 我在群主的基础上改的

🔝