因此,我在Azure VM上使用MongoDB,并且我在Azure网站上托管了一个网站即服务。 我的问题是:有时我会收到这样的错误:
“例外:MongoDB.Driver.MongoConnectionException:打开与服务器的连接时发生异常.---> System.Net.Sockets.SocketException:连接尝试失败,因为连接方未能正确响应一段时间,或建立的连接失败,因为连接的主机未能响应“
我收到此错误后,我再次访问终端并立即取得成功。
详细说明:
ConnectionString:mongodb://xxx.aaa.net:1000,xxx.aaa.net:1001,xxx.aaa.net:1002/?readPreference=nearest
在使用Mongo打开连接之前,我设置了MaxConnectioIdleTimeout属性,如“MongoDefaults.MaxConnectionIdleTime = TimeSpan.FromSeconds(30);” ,保持连接,因为默认情况下,天蓝色LoadBalancer的空闲超时在4分钟后变为无效。
所以,我不知道发生了什么。
有人帮帮我吗?
答案 0 :(得分:3)
是的,4分钟。如果Azure保持闲置4分钟,Azure会关闭连接会话。但是mongodb驱动程序不知道它,它仍将从连接池获得此连接。 您可以将 MaxConnectionIdleTime (在mongodb驱动程序设置中)设置为少于4分钟,或者通过powershell(最多30分钟)将azure VM的最大会话空闲时间设置得更大。
顺便说一句,如果您的网站也在Azure上托管使用私有IP(PIP)访问mongodb服务器,则不会出现此问题。答案 1 :(得分:0)
当我向@apodemakels索取一些正式文档时,我发现MongoDB Production Notes的内容如下:
Azure负载平衡器上的TCP空闲超时默认情况下为240秒,如果您的Azure系统上的TCP keepalive大于此值,它可能会使其静默删除连接。您应该将tcp_keepalive_time设置为120以缓解此问题。
此外,关于此问题,还有ticket on MongoDB Jira。
我希望这两份文件都可以对此有所帮助,或者在有人遇到类似情况的情况下也可以提供帮助。