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);
也是一个可行的解决方案。
我有一个"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);
也是一个可行的解决方案。