請問大佬,我想用workerman來做redis stream的消費(fèi)端,我試了這么寫,好像發(fā)送信號,響應(yīng)不了啊
<?php
use Workerman\Events\EventInterface;
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker();
$worker->count = 1;
$worker->onWorkerStart = function ($worker) {
echo 'Pid is ' . posix_getpid() . "\n";
// 當(dāng)進(jìn)程收到SIGALRM信號時(shí),打印輸出一些信息
Worker::$globalEvent->add(SIGALRM, EventInterface::EV_SIGNAL, function () {
//??? 打印不了啊
echo "Get signal SIGALRM\n";
});
while (true) {
//這里做redis 阻塞讀取 消息
echo "123\n";
sleep(3);
}
};
// 運(yùn)行worker
Worker::runAll();
1、信號無法響應(yīng)原因是:
while死循環(huán)剝奪了workerman的控制權(quán),換句話也就是導(dǎo)致event.loop()循環(huán)永遠(yuǎn)都執(zhí)行不到;
2、建議將while死循環(huán)改成定時(shí)器;
Timer::add(1, function (){
RedisStreamQueue::consumer(
RedisStreamQueue::STREAM_CHANNEL,
RedisStreamQueue::GROUP_CHANNEL,
RedisStreamQueue::CONSUMER_CHANNEL_A
);
});