2017-08-17 39 views
1

我的应用程序在NodeJS 4.4.7上运行,并使用MongoDB驱动程序2.2.31(不是Mongoose)连接到Azure CosmosDB。这就是我如何连接到DB:MongoError:连接在Azure上超时CosmosDB

var connectionString = 'mongodb://USERNAME:[email protected]:10255/DB_NAME?ssl=true' 
var options = { 
    db: { j: false }, 
    server: { autoReconnect: true, socketOptions: { connectTimeoutMS: 300000 } }, 
}; 
require('mongodb').MongoClient.connect(connectionString, options, callback); 

而且我最近开始遇到了以下错误:

MongoError: connection X to http://yyy.documents.azure.com:10255 timed out 

其中X是一个小的整数(我见过8,10,29,和等等)。


一些背景资料:

  • 没办法,错误(30+天),当我没有地理复制设置。
  • 最近从Azure门户(美国西部作为写入区域,美国东部作为读取区域)设置了地理复制。
  • 遇到“无主服务器可用”错误。
  • 将我的mongodb驱动程序从2.0.49更新到2.2.31,错误消失,但立即开始出现“池已损坏”错误。
  • this workaround解决这个问题(即删除&replicaSet=globaldb
  • 后的零个问题3天,我就开始经历了上述“连接超时”的错误。第一次报告的错误发生在8月16日晚上8点24分左右,最后一次错误报告发生在8月17日上午6点40分左右。


我不知道它是否是来自Azure的暂时性问题或有什么问题在我连接到CosmosDB的方式。任何建议,将不胜感激!

回答

1

此问题可能与未正确设置客户端连接参数有关。你可以请尝试设置这些,看看它是否解决超时问题?

MongoClientOptions.Builder optionsBuilder = new MongoClientOptions.Builder(); 
optionsBuilder.socketTimeout(10000); 
optionsBuilder.maxConnectionIdleTime(60000); 
optionsBuilder.heartbeatConnectTimeout(5000); 
MongoClientURI mongoClientURI = new MongoClientURI(props.getMongoDbConnection(), optionsBuilder); 
+0

感谢@alekseys,我想尝试您的建议,但我很难在MongoDB NodeJS驱动程序中查找等效变量。你能帮我找到'maxConnectionIdleTime'和'heartbeatConnectTimeout'等价吗? –

+0

在NodeJS驱动程序中没有严格的等价物。您可能想查看keepAlive选项以及http://mongodb.github.io/node-mongodb-native/2.2/api/MongoClient.html#connect – alekseys

+0

上列出的其他人的组合。谢谢。我正在使用'keepAlive','socketTimeoutMS'和'connectTimeoutMS',并将监视是否在周末发生同样的错误。 –