隊列配置如下:
'redis_consumer' => [
'handler' => Webman\RedisQueue\Process\Consumer::class,
'count' => 8, // 可以設(shè)置多進(jìn)程
'constructor' => [
// 消費者類目錄
'consumer_dir' => app_path() . '/queue/redis'
]
]
consumer_dir下,有2個類
Email,消費隊列send_mail
Sms,消費隊列send_sms
這8個進(jìn)程,和,這2個消費類之間,有什么聯(lián)系嗎?
這8個進(jìn)程中,有幾個是消費的send_mail
隊列?
這8個進(jìn)程中,有幾個是消費的send_sms
隊列?
后來,查看了vendor/webman/redis-queue/src/Process/Consumer.php
/**
* onWorkerStart.
*/
public function onWorkerStart()
{
$dir_iterator = new \RecursiveDirectoryIterator($this->_consumerDir);
$iterator = new \RecursiveIteratorIterator($dir_iterator);
foreach ($iterator as $file) {
if (is_dir($file)) {
continue;
}
$fileinfo = new \SplFileInfo($file);
$ext = $fileinfo->getExtension();
if ($ext === 'php') {
$class = str_replace('/', "\\", substr(substr($file, strlen(base_path())), 0, -4));
if (is_a($class, 'Webman\RedisQueue\Consumer', true)) {
$consumer = Container::get($class);
echo $class. PHP_EOL;
$connection_name = $consumer->connection ?? 'default';
$queue = $consumer->queue;
$connection = Client::connection($connection_name);
$connection->subscribe($queue, [$consumer, 'consume']);
}
}
}
}
可以理解為
這8個進(jìn)程,每個進(jìn)程
其實,同時subscribe了 send_mail
和 send_sms
兩個隊列嗎?