【问题标题】:Subscriber instances in mongodb reactive streamsmongodb 反应流中的订阅者实例
【发布时间】:2020-05-23 10:40:46
【问题描述】:

我遇到过 mongodb 响应式流驱动程序,它们似乎非常适合异步操作。此外,对于我们执行的每个操作,我们都需要为此指定一个订阅者。我的疑问是我们是否应该为我们所做的每个操作创建一个不同的订阅者实例。例如,考虑一下来自 mongodb docs 的 sn-p

// 1. Ordered bulk operation - order is guaranteed
subscriber = new PrintSubscriber<BulkWriteResult>("Bulk write results: %s");
collection.bulkWrite(
  Arrays.asList(new InsertOneModel<>(new Document("_id", 4)),
                new InsertOneModel<>(new Document("_id", 5)),
                new InsertOneModel<>(new Document("_id", 6)),
                new UpdateOneModel<>(new Document("_id", 1),
                                     new Document("$set", new Document("x", 2))),
                new DeleteOneModel<>(new Document("_id", 2)),
                new ReplaceOneModel<>(new Document("_id", 3),
                                      new Document("_id", 3).append("x", 4)))
  ).subscribe(subscriber);
subscriber.await();

在这里,它只做一些批量写入操作。如果我在这样的循环中为批处理执行这些操作

while(someresultset.hasNext()) {
 list.add(someresultset.getNext())

 if(list.size() >= 10000)
   doWrites() // can I use same subscriber instance declared outside of this loop or I should create the subscriber instance every time?

 list = new list()
}

【问题讨论】:

    标签: java mongodb mongodb-query reactive-programming reactive-streams


    【解决方案1】:

    我的疑问是我们是否应该为我们所做的每个操作创建不同的订阅者实例

    是的,您必须在每次订阅时创建不同的订阅者实例。您正在订阅一个响应式流发布者which states

    Subscriber 应该只订阅一个 Publisher 一次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-26
      • 2013-05-15
      • 1970-01-01
      相关资源
      最近更新 更多