【问题标题】:MongoError: connection timed out on Azure CosmosDBMongoError:Azure CosmosDB 上的连接超时
【发布时间】:2018-01-26 06:48:42
【问题描述】:

我的应用程序在 NodeJS 4.4.7 上运行,并使用 MongoDB 驱动程序 2.2.31(不是 Mongoose)连接到 Azure CosmosDB。这就是我连接数据库的方式:

var connectionString = 'mongodb://USERNAME:PASSWORD@yyy.documents.azure.com: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 的方式有问题。任何建议将不胜感激!

【问题讨论】:

    标签: 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);
    

    【讨论】:

    • 谢谢@alekseys,我想试试你的建议,但我很难在 MongoDB NodeJS 驱动程序中找到等效的变量。你能帮我找到maxConnectionIdleTimeheartbeatConnectTimeout 等价物吗?
    • NodeJS 驱动程序中没有严格的等效项。您可能想查看 keepAlive 选项以及mongodb.github.io/node-mongodb-native/2.2/api/…上列出的其他选项的可能组合
    • 谢谢。我正在使用keepAlivesocketTimeoutMSconnectTimeoutMS,并且会监控周末是否发生同样的错误。
    • @BH.Q 设置这些参数是否有助于修复错误?
    猜你喜欢
    • 2021-06-01
    • 2018-08-06
    • 2012-11-14
    • 2011-08-01
    • 2019-06-20
    • 2018-08-28
    • 2022-01-21
    • 2014-03-01
    • 2018-08-17
    相关资源
    最近更新 更多