使用Mono <object> .publishOn(Schedulers.elastic)来阻止操作是否可以接受?

时间:2017-11-07 02:45:51

标签: spring spring-boot reactive-programming project-reactor spring-webflux

我理解在反应流中使用阻塞操作时,我们应该使用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);

}

1 个答案:

答案 0 :(得分:2)

是的,绝对!

如果不这样做,则会阻止主处理/事件循环线程。其中,您应该只有您的机器具有(有效)CPU的数量。

让我们说这是8.这意味着只有8个并发请求正在等待阻止操作,您可以将应用程序完全停止!

此外,请确保在阻塞操作之后将处理移回用于CPU密集工作的线程池。