webman 自定义进程 rabbbitmq 消费者 while 导致worker[rabbitmqttl:31316] exit with status 9

tanhongbin

webman 自定义进程 rabbbitmq 消费者 while 导致worker[rabbitmqttl:31316] exit with status 9


2022 4 5
4个回答

2548a

调试看看while卡了多久,估计是因为你业务代码阻塞太长时间了.

  • 暂无评论
walkor 打赏

while 死循环会导致workerman无法得到运行控制权,无法响应stop reload restart命令。所以当运行需要停止进程时进程没有响应主进程会杀死没响应的进程,出现exit with status 9错误码。

  • tanhongbin 2022-02-15

    老大,那这种情况怎么处理?rabbitmq消费者肯定得while呀

  • tanhongbin 2022-02-15

    开发上线,服务也得重启啥的

  • walkor 2022-02-15

    onWorkerStart里加一行代码

    pcntl_signal(SIGINT, function(){Worker::stopAll();});

    while循环改成

    while($channel->is_consuming()) {
        $channel->wait();
        pcntl_signal_dispatch();
    }

    另外看下 $channel->wait()有没有超时参数,有的话设置成1秒。

  • tanhongbin 2022-02-15

    感谢老大,你这技术神牛

cqqjj1029

用workerman的rabbitmq组件就不需要在onWorkerStart时用while死循环了

  • 暂无评论
小阳光

你也可以用定时器加拉的形式,就不会和出现你的问题。

  • 暂无评论
年代过于久远,无法发表回答
×
🔝