我在webman中自定义进程使用rabbitmq 的消费者 阻塞消费 导致进程busy问题

tanhongbin

问题描述

我在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 不知道是否会有影响?

186 1 0
1个回答

six

感觉stop的时候有影响,死循环stop的时候是被强制kill掉的,业务可能处理一半被kill掉。
while循环改成定时器感觉可行

  • tanhongbin 2024-09-11

    改成定时器 会报错 而且这种改成定时器 主动去取 rabbitmq 强烈不建议这么做 我觉得如果没啥影响 应该可以用 我监控cpu 和 内存 非常低 基本忽略不计 压力测试也没发现任何问题

  • tanhongbin 2024-09-11

    stop 的时候 kill掉正常 现在增加了这段代码 stop的时候不报错了 pcntl_signal(SIGINT, function(){
    Worker::stopAll();
    });

  • six 2024-09-11

    就是stop的时候进程可能被kill掉,业务执行一半,其它感觉没影响。
    看到 workerman 有rabbitmq客户端啊
    https://www.workerman.net/doc/workerman/components/workerman-rabbitmq.html

  • tanhongbin 2024-09-11

    这个没用过 我用的 php-amqplib/php-amqplib 做的入队和消费 ,消费肯定是长连接 入队也是都实现了就是现在 进程busy别的都OK了

×
🔝