按手册启动2组消费者
fast组有2个进程
slow组有1个进程
理想状态,fast组独享2个进程处理, slow只使用自己的1个进行处理
打印信息显示,slow组去占用了fast组的进程导致侵占的其他组的进程数
(相当于所有consumer公用了线程池,没有隔离,慢的会慢慢的把所有进程数沾满)
从打印的进程id就可以看出slow的1个进程id一直在变,在只分配了1个进程处理的情况下并行了(站了fast的进程在执行)
<?php
return [
'consumer' => [
'handler' => Webman\RedisQueue\Process\Consumer::class,
'count' => 2, // 可以设置多进程同时消费
'constructor' => [
// 消费者类目录
'consumer_dir' => app_path() . '/queue/redis'
]
],
'consumer_2' => [
'handler' => Webman\RedisQueue\Process\Consumer::class,
'count' => 1, // 可以设置多进程同时消费
'constructor' => [
// 消费者类目录
'consumer_dir' => app_path() . '/queue/redis/slow'
]
]
];
如1楼评论所说,在consumer调用onWorkerStart绑定事件的时候用的是RecursiveDirectoryIterator做递归遍历,所以所有的配置是不能有包含关系的否则会在配置1的时候被包一次,第二次再被包一次
会因递归的关系混在一起
文档里是
'/queue/redis/fast'
'/queue/redis/slow'
两个完全独立的目录
而你的是
'/queue/redis'
'/queue/redis/slow'
二者是包含关系,所以会混在一起吧。
你说的对,我把图编辑到问题里了,因为用了RecursiveDirectoryIterator, 棒棒的