【问题标题】:Can I use SpringMvc and webflux together?我可以同时使用 SpringMvc 和 webflux 吗?
【发布时间】:2019-05-21 19:44:57
【问题描述】:

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

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

【问题讨论】:

    标签: java spring-boot reactive-programming spring-webflux project-reactor


    【解决方案1】:

    如 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 注释控制器并将反应类型作为返回值返回 (more on this in this Spring Boot talk)。

    如果您想处理纯可扩展性和延迟(因此不一定是原始吞吐量),那么您可以开始使用 spring-boot-starter-webflux 并从那里开始工作。请注意,禁止使用阻塞 API(如阻塞数据库调用),使用 FluxMono 包装这些 API 并安排在单独的线程池上工作的 API 会在性能方面对您不利。

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

    【讨论】:

      猜你喜欢
      • 2011-07-21
      • 2015-05-19
      • 2021-09-05
      • 2014-04-08
      • 2020-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      相关资源
      最近更新 更多