在MongoDB Java驱动程序中,在聚合管道执行中设置超时的行为是什么?

时间:2017-05-24 15:08:22

标签: java mongodb timeout aggregation-framework

我需要在聚合管道执行上设置超时。我正在使用MongoDB Java驱动程序3.2。我知道我必须使用的代码如下:

collection.aggregate(pipeline).maxTime(10, TimeUnit.SECONDS);

问题是,一旦达到超时,我无法找到程序的行为。它会引发异常吗?它是否以静默方式终止返回null结果?

官方的MongoDB文档什么也没说(见cursor.maxTimeMS())。此外,Java API不引用任何特定行为(请参阅maxTime)。

怎么可能?!

1 个答案:

答案 0 :(得分:2)

好的,我知道了。如果聚合管道的执行超过方法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)

希望它有所帮助。