我理解在反应流中使用阻塞操作时,我们应该使用Publisher<Object>.publishOn(Schedulers.elastic).subscribe(//blocking operations go here)
我理解,当我的发布者发布项目列表(例如:Flux)时,未来的项目不必等待当前项目被阻止操作阻止。但是Mono
是否有必要?因为管道中只有一个物品在流动。
PS。我正在使用这样的弹簧启动2无功通量控制器。
@RestController("/item")
public Mono<Response> saveItem(Mono<Item> item) {
return
item.publishOn(Schedulers.elastic()) **//Do I need this ?**
.map(blockingDB.save(item))
.map(item -> new Response(Item);
}
答案 0 :(得分:2)
是的,绝对!
如果不这样做,则会阻止主处理/事件循环线程。其中,您应该只有您的机器具有(有效)CPU的数量。
让我们说这是8.这意味着只有8个并发请求正在等待阻止操作,您可以将应用程序完全停止!
此外,请确保在阻塞操作之后将处理移回用于CPU密集工作的线程池。