问题描述
框架说明:自己公司用composer搭建的框架,而非tp,laravel等。
rabbitmq库:"php-amqplib/php-amqplib": "^2.8"
php版本:7.0+
linux:nginx
我写了一个消费队列的php,然后使用crontab定时每分钟跑一次,也可以消费。后来发现crontab每次执行代码后,都不会关闭connection和channel。因为消费者程序里面有这样的代码,按照rabbitmq官方demo写的,这里有个infinite loop.
while (count($this->channel->callbacks)) {
$this->channel->wait();
}
程序在这里进行阻塞了,所以crontab每过一分钟执行一次,就多一个conectiion,都没有退出。
问题出现的环境背景及自己尝试过哪些方法
主要是用来取出来消费队列里的消息,我自己本机使用php /path/to/consumer.php 是可以的,不过都是ctrl+c来退出的。但是如果真正放在linux要怎么调用呢?
- 我再想是不是不该用crontab定时任务,而要用nohub这样的常驻程序来执行。
- 或者说是如何让程序跳出那个infinite loop?
相关代码
while (count($this->channel->callbacks)) {
$this->channel->wait();
}
你期待的结果是什么?实际看到的错误信息又是什么?
目前使用crontab定时每分钟跑的结果就是每次都会创建一个connection,然后都没关闭,最后就N个connection,服务器cpu rabbitmq占用很高,后面就瘫痪了。
可以改成nohup常驻进程的方式运行,不用定时任务。