首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP ampq + rabbit --长时间运行的生产者:可以向已经声明的队列发送消息,但不能声明新的队列

PHP ampq + rabbit --长时间运行的生产者:可以向已经声明的队列发送消息,但不能声明新的队列
EN

Stack Overflow用户
提问于 2019-06-07 14:06:41
回答 1查看 1.7K关注 0票数 4

我有一个应该总是运行的“生产者”,但似乎在一天左右之后,它仍然能够将消息发送到它之前声明的队列,但是当尝试声明一个新队列时,它崩溃了:

代码语言:javascript
运行
复制
'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秒。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-10 13:15:30

事实证明,php-amqplib的下一个小版本将添加一个方法:$connection->checkHeartBeat(); (它是在我发布这个问题的前几天提交给项目代码库的)。定期调用它可以解决问题。

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56488779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档