PHP amqp + rabbitMQ -- long 运行 生产者:可以向已经声明的队列发送消息,但不能声明新队列

PHP ampq + rabbit MQ -- long running producer: can send messages to queues already declared, but can't declare new queues

我有一个"producer",它应该总是运行ning,但似乎在一天左右之后,它仍然能够向它之前声明的队列发送消息,但是当试图声明一个新队列时,它爆炸了:

'PhpAmqpLib\Exception\AMQPHeartbeatMissedException' with message 'Missed server heartbeat' in /php-amqplib/php-amqplib/PhpAmqpLib/Wire/IO/AbstractIO.php:140

我以为心跳只是针对消费者的(因为没有地方可以检查生产者的心跳)?当我不是 "consumer" 时正在检查心跳是一个错误吗?

或者我的脚本在声明队列时也变成了"consumer",因为它需要"consume"服务器反馈队列已准备好使用什么的?

它当前的设置方式,我可以定期使用什么解决方法来检查 queue_declare 如果它是 运行 是否会爆炸,这样当我确实需要 运行 queue_declare 不会突然爆炸吧?

我在最新版本 (2.9.2) 上使用 AMQPSSLConnection$connection->isConnected() 一直返回 true。心跳设置为 15 秒。

事实证明 php-amqplib 的下一个次要版本将添加一个方法:$connection->checkHeartBeat();(在我发布此问题前几天它已提交到项目回购)。定期调用这个可以解决问题。

同时,定期调用 $connection->wait(null, true); 也是一个可行的解决方案。