我在webman中自定义进程使用rabbitmq 的消费者 阻塞消费 导致进程busy问题 是否有啥好办法解决,如果没有, 那这个busy是否对系统会有影响?
消费端代码
$this->channel->basic_consume(
$queue,
'',
false,
false,
false,
false,
$callback
);
register_shutdown_function(function(){
$this->close();
});
$this->channel->consume();//这家伙会阻塞 内部有while代码导致的
我使用 status 查看 进程一直是busy状态 监控不到内存等信息 N/A 不知道是否会有影响?
感觉stop的时候有影响,死循环stop的时候是被强制kill掉的,业务可能处理一半被kill掉。
while循环改成定时器感觉可行
改成定时器 会报错 而且这种改成定时器 主动去取 rabbitmq 强烈不建议这么做 我觉得如果没啥影响 应该可以用 我监控cpu 和 内存 非常低 基本忽略不计 压力测试也没发现任何问题
stop 的时候 kill掉正常 现在增加了这段代码 stop的时候不报错了 pcntl_signal(SIGINT, function(){
Worker::stopAll();
});
就是stop的时候进程可能被kill掉,业务执行一半,其它感觉没影响。
看到 workerman 有rabbitmq客户端啊
https://www.workerman.net/doc/workerman/components/workerman-rabbitmq.html
这个没用过 我用的 php-amqplib/php-amqplib 做的入队和消费 ,消费肯定是长连接 入队也是都实现了就是现在 进程busy别的都OK了