我有一个情况,我需要在异步插入和获取数据(显然它应该是同步的)目前我使用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