每周一次我们的RabbitMQ服务器停止接受新的连接。我们发现这是因为服务器端没有正确关闭旧的连接。在客户端,我们关闭了连接,但在RabbitMQ管理工具(Web界面)中报告有数千个打开的连接。为什么连接不能自动关闭?我是否遗漏了某些配置设置?这是由于我在客户端处置连接的方式导致的吗?
显然,如果客户端连接没有正确关闭,则服务器端的连接将永远不会关闭。由RabbitMQ使用的AMQP(高级消息队列协议)确保连接为长时间运行的任务保持打开状态。我的问题的原因当然是连接没有被正确关闭。我的解决方法是修复我的连接工厂中的析构函数,并且我还使连接工厂提供一个单例连接而不是创建新的连接。我还为模型(通道)创建了一个池。这样,我不需要创建多个连接,并且由于模型池的存在,我大大提高了性能。