Spring boot Spring引导反应式WebClient调用旧端点

Spring boot Spring引导反应式WebClient调用旧端点,spring-boot,webclient,spring-webflux,reactive,Spring Boot,Webclient,Spring Webflux,Reactive,在SpringBoot(2.2.2.RELEASE)应用程序中,我有反应式端点(返回Mono或Flux),每个端点都使用反应式WebClient调用另一个服务。此“其他”服务是遗留(非反应性)服务 我的问题是: 如果我的反应性端点调用这个执行阻塞操作的非反应性端点,那么使用Webflux(反应性WebClient)是否有好处 我的反应性端点仍然是反应性的吗 它们是 1.不完全。 2.在更改旧版API之前,您的请求不是完全响应的 说明: 端到端反应式模式仅有助于提高性能 目前您使用的是反应式客户

在SpringBoot(2.2.2.RELEASE)应用程序中,我有反应式端点(返回Mono或Flux),每个端点都使用反应式WebClient调用另一个服务。此“其他”服务是遗留(非反应性)服务

我的问题是:

  • 如果我的反应性端点调用这个执行阻塞操作的非反应性端点,那么使用Webflux(反应性WebClient)是否有好处

  • 我的反应性端点仍然是反应性的吗

    • 它们是 1.不完全。 2.在更改旧版API之前,您的请求不是完全响应的

      说明: 端到端反应式模式仅有助于提高性能 目前您使用的是反应式客户端,这有助于通过双向通信连接到服务器。
      第一组API是被动的,因此web服务器层现在是被动的,但数据层(遗留API)不是被动的

      如果我们谈论HTTP端点,我们可以使用阻塞或非阻塞(异步)客户端调用它们,但不是完全被动的


      如果您的“新”应用程序是反应式的,那么您必须使用非阻塞客户端(在您的情况下是WebClient),否则您将阻塞NIO线程并失去反应式方法的所有优势。“其他”应用程序被阻塞的事实并不重要,您仍然可以得到资源密集度较低的“新”应用程序。

      是的,端点是HTTPS,我有一个后续问题。从我调试的结果来看,反应式WebClient共享同一个线程池?对于所有WebClient实例,每个内核一个NIO线程。在高负载情况下,它们是否可能相互阻塞?守护进程线程[reactor-http-nio-1]您甚至可以只使用一个WebClient实例,这是安全的。如果您不调用
      block()
      方法,也不在链中的某个位置使用阻塞api,那么可以确保NIO线程上没有任何块。有一个工具,它可以帮助您找到阻止呼叫,如果您有疑问。