如何使用统一拓扑设置自动重新连接

Posted

技术标签:

【中文标题】如何使用统一拓扑设置自动重新连接【英文标题】:How to set Auto Reconnect with Unified Topology 【发布时间】:2020-04-15 08:36:14 【问题描述】:

设置useUnifiedTopology=true后,自动重新连接停止工作并产生以下错误:

DeprecationWarning: The option `reconnectInterval` is incompatible with the unified topology
DeprecationWarning: The option `reconnectTries` is incompatible with the unified topology
DeprecationWarning: The option `autoReconnect` is incompatible with the unified topology

如何让服务器自动重新连接该新标志?

我正在使用mongoose.createConnection 连接以下选项:


        autoReconnect: true,
        keepAliveInitialDelay: 300000,
        connectTimeoutMS: 300000,
        reconnectTries: Number.MAX_VALUE,
        reconnectInterval: 1000,
        useNewUrlParser: true,
        useUnifiedTopology: true,
        useCreateIndex: true,
        poolSize: 10,
        auth: 
            authSource: "admin"
        ,
        user: process.env.MONGO_USER,
        pass: process.env.MONGO_PASS
    

【问题讨论】:

【参考方案1】:

根据文档,您通常不应将 autoReconnectuseUnifiedTopology 结合使用 来源:https://mongoosejs.com/docs/connections.html#options

autoReconnect - 底层 MongoDB 驱动程序在失去与 MongoDB 的连接时会自动尝试重新连接。除非您是想要管理自己的连接池的高级用户,否则不要将此选项设置为 false。

【讨论】:

我没有使用 mongoose 但原始 mongodb 模块有问题,它不允许我使用 autoReconnect=true: (node:4642) DeprecationWarning: 选项 autoReconnect 与统一拓扑,请访问http://...(node:4642) 弃用警告:选项reconnectTries与统一拓扑不兼容,请访问http://... Mongoose 在下面使用 mongodb nodejs 驱动。所以同样的原则也适用:) 是的,但是新的统一拓扑不允许旧选项“autoReconnect”和“reconnectTries” 这正是我的观点 :) 您不应该根据文档设置这些属性。您应该实施自己的重新连接尝试。请参阅此库以获取示例:github.com/nestjs/mongoose/blob/master/lib/… 这是脑残。所以现在成千上万的人将重新实现自己的重新连接逻辑并创建许多自定义的错误重新连接逻辑......

以上是关于如何使用统一拓扑设置自动重新连接的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python asyncio 中处理 tcp 客户端套接字自动重新连接?

如何避免SSH Secure Shell Client连接Linux超时,自动断开

ubuntu无法自动获取ip地址?

如何在IIS中设置,客户端20分钟不操作,自动断开连接

如何在IIS中设置,客户端20分钟不操作,自动断开连接

如何使用 Azure Redis 缓存