使用 Mono<Object>.publishOn(Schedulers.elastic) 进行阻塞操作是否可以接受?

Is it acceptable to use Mono<Object>.publishOn(Schedulers.elastic) for blocking operations?

我理解在反应流中使用阻塞操作时我们应该使用 Publisher<Object>.publishOn(Schedulers.elastic).subscribe(//blocking operations go here)

我知道当我的发布者发布项目列表(例如:Flux)时,未来的项目不必等待当前项目被阻止操作阻止。但是在 Mono 的情况下是否有必要?因为我的管道里只会有一个项目流动。

PS。我正在使用 spring boot 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);

}

是的,绝对!

如果你不这样做,你就会阻塞主 processing/event 循环线程。其中,您应该只拥有您的机器拥有的(有效)CPU 个数量。

假设是 8。这意味着只有 8 个并发请求正在等待阻塞操作,您的应用程序将完全停止!

此外,确保在阻塞操作后将处理移回线程池以用于 CPU 紧张的工作。