框架说明:自己公司用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占用很高,后面就瘫痪了。
缥缈止盈
相关分类