MongoDb async/insertData, sync/getData: using ReactiveMongoT



我有一个情况,我需要在异步插入和获取数据(显然它应该是同步的)目前我使用ReactiveMongoTemplate

//insert async
reactiveMongoTemplate.save(MyObject)
// get data in sync
reactiveMongoTemplate.find(Query.query(Criteria.where("myId")
.in("myList")), MyObject.class);

上面的代码都是异步的

我试图用toIterable()/toStream()阻止.find

reactiveMongoTemplate.find(Query.query(Criteria.where("myId")
.in("myList")), MyObject.class).toIterable().forEach(myRecord -> {
// process response
});

但是他们失败了,错误如下

Iterating over a toIterable() / toStream() is blocking, which is not supported in thread reactor-http-nio-3

更多的代码

webClient.post()
.uri("serviceurl")
.headers("headers")
.body(Mono.just(body), JsonNode.class)
.retrieve()
.bodyToMono(MyObject.class)
.flatMap(responseObject -> {
Map<String, MySubResponse> repMap = responseObject.
.stream()
.collect(Collectors.toMap("key", "value"));
reactiveMongoTemplate.find(Query.query(Criteria.where("myId")
.in("myList")), MyObject.class).toIterable().forEach(val -> {
MySubResponse mySubResponse = repMap.get("val.key");
mySubResponse.setMyProperty(val.getProperty)
}
});
return repMap.values();
});

有什么建议,我怎么才能做到这一点?

还有其他选择吗?

我应该只是使用常规mongo模板来获取详细信息,所以结果将是同步的,这是一个很好的做法,使用ReactiveMongoTemplate和MongoTemplate在同一个项目?

请帮忙,由于

我可以使用下面的代码使其工作

.collectList() // Collects all elements emitted by this Flux into a List 
.toFuture() // waits and returns CompletableFuture
.join(); // return's the data instead of CompletableFuture

相关内容

  • 没有找到相关文章

最新更新