【问题标题】:Do we have to write reactive code inside WebFlux?我们必须在 WebFlux 中编写响应式代码吗?
【发布时间】:2018-07-27 15:27:40
【问题描述】:

我知道响应式控制器应该返回 Flux<T>Mono<T>,这意味着它在 http 处理程序级别上是响应式的。

但是,如果我们在具有 非反应性代码的控制器中执行外部 http 调用,这必须等待很长时间 IO 直到该 http 调用响应,会发生什么如果 10000 个用户同时使用 http 调用此控制器,会发生什么情况?假设只有 一个 线程来处理控制器内部的代码,那么在 IO 期间会处理 更多 个请求吗?

如果不是,我们是否必须使用响应式代码(例如 WebClientReactiveRepository)在 DB 上调用外部 http API 和 CRUD?

如果是,如何实施?因为它只是几行非响应式代码,Java 怎么知道“嘿,它正在等待响应,让我们先处理另一个事件”?

【问题讨论】:

标签: java spring spring-webflux project-reactor reactive


【解决方案1】:

禁止在响应式管道(例如响应式控制器方法)中执行阻塞 I/O;如果使用 block 运算符,这样做可能会导致运行时出现严重问题,甚至会导致终端错误。

Reactor 提供了封装阻塞调用和调度在特定线程上工作的基础架构。请参阅反应器参考文档中的How do I wrap a synchronous, blocking call 部分。这样做会奏效,但可能会对性能产生负面影响。

【讨论】:

    【解决方案2】:

    我自己做了一个实验,看来我们必须在 WebFlux 中使用响应式代码,以便一切都是响应式的,并且性能非常高

    【讨论】:

      猜你喜欢
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 2011-04-21
      • 1970-01-01
      • 2020-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多