RabbitMQ不会在服务器端关闭连接

3
每周一次我们的RabbitMQ服务器停止接受新的连接。我们发现这是因为服务器端没有正确关闭旧的连接。在客户端,我们关闭了连接,但在RabbitMQ管理工具(Web界面)中报告有数千个打开的连接。
为什么连接不能自动关闭?我是否遗漏了某些配置设置?这是由于我在客户端处置连接的方式导致的吗?

你可能没有在客户端正确地关闭连接,导致它们在服务器端保持打开和空闲状态,需要通过管理插件手动关闭它们。 - robthewolf
是的,谢谢。我尝试了一下并找到了一个很好的解决方案来解决我的问题! - Molibar
1个回答

4
显然,如果客户端连接没有正确关闭,则服务器端的连接将永远不会关闭。由RabbitMQ使用的AMQP(高级消息队列协议)确保连接为长时间运行的任务保持打开状态。
我的问题的原因当然是连接没有被正确关闭。我的解决方法是修复我的连接工厂中的析构函数,并且我还使连接工厂提供一个单例连接而不是创建新的连接。我还为模型(通道)创建了一个池。这样,我不需要创建多个连接,并且由于模型池的存在,我大大提高了性能。

1
看起来这是rmq的一个bug,因为即使使用rabbitmqadmin也无法关闭这样被冻结的连接。 - Ruslan Nigmatulin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接