我将开始学习使用Spring Boot中的Webflux进行反应式Java编程。
我遇到了一个场景,这个场景中对数据库进行反应式地调用非常困难。
如果我在Mono中进行一次阻塞式的数据库调用,会发生什么?
代码可能如下所示...
我遇到了一个场景,这个场景中对数据库进行反应式地调用非常困难。
如果我在Mono中进行一次阻塞式的数据库调用,会发生什么?
代码可能如下所示...
public Mono<ReturnThing> isThisAsyncOrNot() {
//Async, non-blocking API call
return webClient.doSomeAPIWork()
.flatMap(whatevers -> {
//Synchronous, blocking database call
ReturnThing returnThing= returnThingRepo.getByWhateverId(whatever.ID);
}
return returnThing;
});
}
现在我知道有一种反应式的简单方法来解决这个问题。但这不是我要问的问题(实际代码相当复杂)。
我真正想知道的是同步数据库调用会对我的性能产生什么影响。整个方法是否仍然是异步非阻塞的(除了进行数据库调用的部分是阻塞的)?还是这样做会破坏整个反应式范例,导致整个过程从头到尾都变成阻塞的?
flatMap()
中使用的lambda方法返回了ReturnThing
而不是Mono
。我理解你想简化你的代码,但现在有些混淆了。你的getByWhateverId()
方法返回的是Mono
(但如果是这种情况,它是响应式的),还是你的意思是使用map()
而不是flatMap()
? - Honza Zidek