我当前正在尝试优化服务器,停止了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。
这真的是一个问题,还是我忘记了什么?如果确实存在问题,我将在其回购/页面上提交错误报告,但找不到任何内容。
谢谢!
答案 0 :(得分:0)
绝对看起来像个错误。我看到了相同的行为。看起来它与useUnifiedTopology: true
有关。如果将其删除,则可以使用较短的超时时间。
答案 1 :(得分:0)
这是与mongodb
使用的mongoose
客户相关的问题,因此我们需要等待mongo团队解决:(