2017-08-17 79 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',並將監視是否在週末發生同樣的錯誤。 –