猫鼬中的connectTimeoutMS不起作用

时间:2019-12-05 13:03:37

标签: node.js mongodb mongoose

我当前正在尝试优化服务器,停止了MongoDB服务器以测试超时行为,并注意到Mongoose 6.4.1中发生了一个奇怪的问题(?)。

基本上,MongoDB的默认超时为30000ms(30秒),我通过connectTimeoutMS选项中的mongoose.connect将其设置为7000(7秒),但是它不遵守该值,并且超时时间恰好是30秒,这是默认设置。

我的连接代码:

mongoose.connect(`mongodb://localhost/${process.env.DB_NAME}`, {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  connectTimeoutMS: 7000 // Also tried to use together with 'socketTimeoutMS'
});

运行和等待时间超过7s:

MongoTimeoutError: Server selection timed out after 30000 ms

我看到了this question并尝试使用:

mongoose.connect(`mongodb://localhost/${process.env.DB_NAME}`, {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  connectTimeoutMS: 7000,
  server: { socketOptions: { connectTimeoutMS: 7000 }}
});

但是,这似乎已经过时了,正如猫鼬抱怨的那样:

the server/replset/mongos/db options are deprecated, all their options are supported at the top level of the options object [poolSize,ssl,sslValidate,sslCA,sslCert,sslKey,sslPass,sslCRL,autoReconnect,noDelay,keepAlive,keepAliveInitialDelay,connectTimeoutMS,family,socketTimeoutMS,reconnectTries,reconnectInterval,ha,haInterval,replicaSet,secondaryAcceptableLatencyMS,acceptableLatencyMS,connectWithNoPrimary,authSource,w,wtimeout,j,forceServerObjectId,serializeFunctions,ignoreUndefined,raw,bufferMaxEntries,readPreference,pkFactory,promiseLibrary,readConcern,maxStalenessSeconds,loggerLevel,logger,promoteValues,promoteBuffers,promoteLongs,domainsEnabled,checkServerIdentity,validateOptions,appname,auth,user,password,authMechanism,compression,fsync,readPreferenceTags,numberOfRetries,auto_reconnect,minSize,monitorCommands,retryWrites,retryReads,useNewUrlParser,useUnifiedTopology,serverSelectionTimeoutMS,useRecoveryToken,autoEncryption]

,它也超时,默认值为30000ms。

这真的是一个问题,还是我忘记了什么?如果确实存在问题,我将在其回购/页面上提交错误报告,但找不到任何内容。

谢谢!

2 个答案:

答案 0 :(得分:0)

绝对看起来像个错误。我看到了相同的行为。看起来它与useUnifiedTopology: true有关。如果将其删除,则可以使用较短的超时时间。

答案 1 :(得分:0)

这是与mongodb使用的mongoose客户相关的问题,因此我们需要等待mongo团队解决:(