我想在一个项目中使用 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(如阻塞数据库调用),使用 FluxMono 包装它们并在单独的线程池上进行调度将对性能不利边。

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


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!