在JAVA中关闭MongoDB Tailable Cursor

时间:2017-05-23 12:54:58

标签: java mongodb api

我在MongoDB上的Capped Collection上使用了一个tailable游标。 但是,当我试图关闭它。等待“hasNext()”的线程永远停滞不前。在例子中,我试图用光标检索集合的所有文档。 6秒后,另一个线程关闭光标。

MongoCursor<Document> cursor = mongocollection.find().cursorType(CursorType.TailableAwait)
            .noCursorTimeout(true).iterator();
new Thread(() -> {
    // Wait for 6 seconds
    try {
        Thread.sleep(6000);
    } catch (Exception e) {
        e.printStackTrace();
    }
    //Close the cursor
    cursor.close();
}).start();

try {
    while (cursor.hasNext()) {
        Document doc = cursor.next();
        // do what you want with doc
        System.out.println(doc.toJson());
    }
} catch (MongoCursorNotFoundException e) {
   //OK, the cursor is closed
   e.printStackTrace();
}
System.out.println("end");

我正在使用mongoDB java驱动程序3.4.2和mongoDB服务器3.4

我尝试使用CursorType.Tailable选项,但网络被以下请求淹没: 它可以工作,但网络充斥着这样的请求:

15:36:48.002 [Thread-366] DEBUG org.mongodb.driver.protocol.command - Sending command {getMore : BsonInt64{value=43120971156}} to database smartrail on connection [connectionId{localValue:7, serverValue:253}] to server item-89671:27012
15:36:48.002 [Thread-366] DEBUG org.mongodb.driver.protocol.command - Command execution completed

0 个答案:

没有答案