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

53

我希望在一个项目中同时使用2种方法(响应式和标准)。

我试图将一个REST API端点迁移到响应式WebFlux,并在迁移其余端点之前测试性能。 但是它没有起作用。我为其添加了路由器和处理程序,但直到我从依赖项中删除 spring-boot-starter-web 并禁用@RestController,我一直会得到 http 404 状态码。这是否可能?或者我应该将整个项目迁移到响应式方法?

1个回答

77
正如Spring Boot参考文档中所解释的那样,如果MVC和WebFlux同时可用,Spring Boot将自动配置Spring MVC应用程序。这样做有几个原因:
  • Spring MVC无法在Netty上运行
  • 两个基础架构将竞争同一个工作(例如,提供静态资源、映射等)
  • 在同一个容器中混合使用这两种运行时模型不是一个好主意,很可能会表现糟糕或根本无法工作

根据您想要实现的目标,可能有几种方法可以处理此问题。

如果您想使用WebClient来优化多个并发远程HTTP调用并使用Reactor操作符,则可以继续使用Spring MVC注释控制器并返回反应类型作为返回值(更多信息请参见此Spring Boot讲座)。

如果您想要纯粹的可扩展性和延迟(因此不一定是原始吞吐量),那么您可以开始使用spring-boot-starter-webflux并从那里开始工作。请注意,使用阻塞API(例如阻塞数据库调用)是被禁止的,并且用FluxMono包装这些API并将该工作调度到单独的线程池上会对性能产生负面影响。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接