MongoCollection.watch () не смотрит мгновенно - PullRequest
0 голосов
/ 09 апреля 2019

Кажется, что часы не работают мгновенно, следующий код выводит вставки только после небольшого сна.Как я могу ждать, пока не будет подключен поток изменений?

public class Mongodb4Test {
    public static void main(String[] args) {
        MongoCollection<Document> col = XXX;
        ChangeStreamIterable<Document> watch = col.watch();

        new Thread(() -> {
            col.insertOne(new Document("key", "val1"));
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            col.insertOne(new Document("key", "val2"));
        }).start();

        for (ChangeStreamDocument<Document> change : watch) {
            if (change.getUpdateDescription() != null)
                System.out.println(change.getUpdateDescription().getUpdatedFields());
            System.out.println(change.getOperationType());
            System.out.println(change.getFullDocument());
        }
    }
}

1 Ответ

0 голосов
/ 09 апреля 2019

Хорошо, нашел проблему: мне нужно сначала получить итератор:

public class Mongodb4Test {
    public static void main(String[] args) {
        MongoCollection<Document> col = XXX;
        ChangeStreamIterable<Document> watch = col.watch();
        MongoCursor<ChangeStreamDocument<Document>> iterator = watch.iterator();

        new Thread(() -> {
            col.insertOne(new Document("key", "val1"));
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            col.insertOne(new Document("key", "val2"));
        }).start();

        while (iterator.hasNext()) {
            ChangeStreamDocument<Document> change = iterator.next();
            if (change.getUpdateDescription() != null)
                System.out.println(change.getUpdateDescription().getUpdatedFields());
            System.out.println(change.getOperationType());
            System.out.println(change.getFullDocument());
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...