我需要设置聚合管道执行的超时。我正在使用MongoDB Java驱动程序3.2。我知道我必须使用的代码如下:
collection.aggregate(pipeline).maxTime(10, TimeUnit.SECONDS);
问题是,一旦达到超时,我就无法在任何地方找到程序的行为。它是否抛出了异常?它是否以静默方式终止,返回null
结果?
MongoDB官方文档什么也没说(参见cursor.maxTimeMS(((。此外,Java API 不引用任何特定行为(参见 maxTime(。
怎么可能?!
好的,我知道了。如果聚合管道的执行超过通过该方法表示的时间maxTime
则会引发com.mongodb.MongoExecutionTimeoutException
。
异常的堆栈跟踪如下:
com.mongodb.MongoExecutionTimeoutException: operation exceeded time limit
at com.mongodb.connection.ProtocolHelper.createSpecialException(ProtocolHelper.java:157)
at com.mongodb.connection.ProtocolHelper.getCommandFailureException(ProtocolHelper.java:111)
at com.mongodb.connection.CommandProtocol.execute(CommandProtocol.java:114)
at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:159)
at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:286)
at com.mongodb.connection.DefaultServerConnection.command(DefaultServerConnection.java:173)
at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:215)
at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:206)
at com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocol(CommandOperationHelper.java:112)
at com.mongodb.operation.AggregateOperation$1.call(AggregateOperation.java:227)
at com.mongodb.operation.AggregateOperation$1.call(AggregateOperation.java:223)
at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:239)
at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:212)
at com.mongodb.operation.AggregateOperation.execute(AggregateOperation.java:223)
at com.mongodb.operation.AggregateOperation.execute(AggregateOperation.java:65)
at com.mongodb.Mongo.execute(Mongo.java:772)
at com.mongodb.Mongo$2.execute(Mongo.java:759)
希望对您有所帮助。