我想在一个项目中使用 2 种方法(响应式(Reactive)和标准式)。
我尝试将一个 REST API 端点迁移到响应式 webflux 并在迁移其余端点之前测试性能。但它没有用。我为他添加了路由器和处理程序,但直到我没有从依赖项中删除 spring-boot-starter-web
并禁用 @RestController
我得到了 http 404
一直都是代码。可不可以?或者我应该将所有项目迁移到响应式(Reactive)方法吗?
请您参考如下方法:
如 Spring Boot 引用文档 Spring Boot will auto-configure a Spring MVC application if both MVC and WebFlux are available 中所述。这有几个原因:
- Spring MVC 无法在 Netty 上运行
- 两个基础架构将竞争相同的工作(例如,提供静态资源、映射等)
- 在同一个容器中混合两种运行时模型不是一个好主意,并且可能表现不佳或根本无法工作
根据您要实现的目标,可能有多种方法可以解决此问题。
如果您想使用 WebClient
优化多个并发远程 HTTP 调用并使用 Reactor 运算符,您可以继续使用 Spring MVC 注释 Controller 并返回 react 类型作为返回值 (more on this in this Spring Boot talk) .
如果您想处理纯粹的可伸缩性和延迟(因此不一定是原始吞吐量),那么您可以开始使用 spring-boot-starter-webflux
并从那里开始工作。请注意,禁止使用阻塞 API(如阻塞数据库调用),使用 Flux
或 Mono
包装它们并在单独的线程池上进行调度将对性能不利边。
最后,如果您想使用 Spring WebFlux 提供的函数式方法,那么它的性能不一定会更好。这实际上取决于您的用例以及您如何实现它。