我有一个应该总是运行的“生产者”,但似乎在一天左右之后,它仍然能够将消息发送到它之前声明的队列,但是当尝试声明一个新队列时,它崩溃了:
'PhpAmqpLib\Exception\AMQPHeartbeatMissedException' with message 'Missed server heartbeat' in /php-amqplib/php-amqplib/PhpAmqpLib/Wire/IO/AbstractIO.php:140
我以为心跳只针对消费者(因为没有地方检查生产者的心跳)?当我不是“消费者”时,心跳被检查,这是一个bug吗?
或者,当我声明一个队列时,我的脚本也变成了一个“消费者”,因为它需要“消费”来自服务器的反馈,即队列已经准备好可以使用了。
以目前的设置方式,我可以定期使用什么解决方法来检查queue_declare
在运行时是否会崩溃,这样当我确实需要运行queue_declare
时,它就不会意外崩溃?
我在最新的版本(2.9.2)上使用AMQPSSLConnection
,而$connection->isConnected()
一直在返回true
。心跳设置为15秒。
发布于 2019-06-10 13:15:30
事实证明,php-amqplib
的下一个小版本将添加一个方法:$connection->checkHeartBeat();
(它是在我发布这个问题的前几天提交给项目代码库的)。定期调用它可以解决问题。
同时,定期调用$connection->wait(null, true);
也是一种可行的解决方案。
https://stackoverflow.com/questions/56488779
复制相似问题