我可以同时使用SpringMvc和webflux吗?

我想在一个项目中使用2种方法(反应式和标准式)。

我尝试将一个 REST API 端点迁移到反应式 webflux,并在迁移其余端点之前测试性能。但它没有奏效。我为他添加了路由器和处理程序,但在我没有从依赖项中删除并禁用之前,我一直得到http代码。这可能吗?还是应该将所有项目迁移到反应式方法?spring-boot-starter-web@RestController404


答案 1

如 Spring Boot 参考文档中所述,如果 MVC 和 WebFlux 都可用,则 Spring Boot 将自动配置 Spring MVC 应用程序。这有几个原因:

  • 春季MVC无法在Netty上运行
  • 两个基础结构将竞争相同的工作(例如,提供静态资源,映射等)
  • 在同一容器中混合使用两个运行时模型不是一个好主意,并且可能会表现不佳或根本不起作用

根据您要实现的目标,可能有几种方法可以解决这个问题。

如果您想使用来优化多个并发远程HTTP调用并使用Reacter运算符,则可以继续使用Spring MVC注释控制器并返回反应式类型作为返回值(在此Spring Boot讨论中将对此进行详细介绍)。WebClient

如果你想处理纯粹的可伸缩性和延迟(所以不一定是原始吞吐量),那么你可以开始使用并从那里开始工作。请注意,禁止使用阻塞 API(如阻塞数据库调用),并且包装那些在单独的线程池上工作的或 和调度的 API 将在性能方面对您不利。spring-boot-starter-webfluxFluxMono

最后,如果你想使用Spring WebFlux提供的函数式方法,那么它不一定能表现得更好。这实际上取决于您的用例以及您如何实现它。


答案 2

推荐