官网文档中,对于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里面的前后操作,被不同进程同时执行了的情况。
同时我也期望我指定某个类来执行这个队列。此时我该如何进行配置。或者我可以查看哪个地方的代码来知道如何配置。
还请大佬们指教。
指定某个类来执行这个队列不就是在Consumer里设置$queue的值么
至于最前面的问题,我看不明白,就算多进程同时监听同一个队列,一个任务只会被一个消费者消费,不会出现一个任务同时被两个消费进程消费的情况(前提:同一个队列)
我举个例子,如果是把消费队列都放在同一个目录下面,加入目录下面有一个UserLoginLog.php 用户登录日志消费者。这个消费目录启动的进程个数是8个,那么如果在我在向UserLoginLog.php队列里面插入数据的时候,如果数据很多,当进程1读取到了用户1的信息的时候,进程2可能也会读取到用户2的信息,此时谁先写入这个就不一定是1先写入了,那么写入的数据的顺序就错乱了。
我说的指定某个类就是,我的配置里面不要指定某个文件夹
读取的顺序是优先后的,但是执行的时间可能会不一定会是先读取到就先执行完
1,那就只开一个进程,MPSC
2.自己实现分发器
也可以试试composer require thb\redis 这个就是指定到类的 我在群主的基础上改的