Spring 启动响应式 WebClient 调用遗留端点
Spring boot reactive WebClient calling legacy endpoint
在 Spring Boot (2.2.2.RELEASE) 应用程序中,我有反应式端点(返回 Mono 或 Flux),每个端点都使用反应式 WebClient 来调用另一个服务。此 "other" 服务是遗留(非反应性)服务。
这是我的问题:
如果我的反应式端点正在调用这个非反应式端点,它会阻塞东西,那么使用 Webflux(反应式 WebClient)有好处吗?
我的反应性端点是否仍然反应性?
他们是
1.不完全。
2. 在您更改遗留 API 之前,您的请求不会完全响应
解释:
端到端响应式模式仅有助于性能方面
目前您正在使用反应式客户端,这有助于以两种方式连接到服务器。
第一组 API 是反应性的,因此 Web 服务器层现在是反应性的,但数据层(旧版 API)不是反应性的
如果我们谈论的是 HTTP 端点,我们可以使用阻塞或非阻塞(异步)客户端调用它们,但不能完全响应。
如果您的 "new" 应用程序是反应式的,您必须使用非阻塞客户端(在您的情况下是 WebClient),否则您将阻塞 NIO 线程并失去反应式方法的所有优势。 “其他”应用程序阻塞这一事实并不重要,您仍然可以获得资源密集度较低的 "new" 应用程序。
在 Spring Boot (2.2.2.RELEASE) 应用程序中,我有反应式端点(返回 Mono 或 Flux),每个端点都使用反应式 WebClient 来调用另一个服务。此 "other" 服务是遗留(非反应性)服务。
这是我的问题:
如果我的反应式端点正在调用这个非反应式端点,它会阻塞东西,那么使用 Webflux(反应式 WebClient)有好处吗?
我的反应性端点是否仍然反应性?
他们是 1.不完全。 2. 在您更改遗留 API 之前,您的请求不会完全响应
解释: 端到端响应式模式仅有助于性能方面 目前您正在使用反应式客户端,这有助于以两种方式连接到服务器。 第一组 API 是反应性的,因此 Web 服务器层现在是反应性的,但数据层(旧版 API)不是反应性的
如果我们谈论的是 HTTP 端点,我们可以使用阻塞或非阻塞(异步)客户端调用它们,但不能完全响应。
如果您的 "new" 应用程序是反应式的,您必须使用非阻塞客户端(在您的情况下是 WebClient),否则您将阻塞 NIO 线程并失去反应式方法的所有优势。 “其他”应用程序阻塞这一事实并不重要,您仍然可以获得资源密集度较低的 "new" 应用程序。