首页 文章

WebFlux web和webflux启动器

提问于
浏览
1

我使用 webflux starter 创建了一个 Spring boot 2.0.0.M7 项目,因为我想使用所有异步和非阻塞功能 . 我添加了 server.servlet.context-path 但是如果我不添加Web启动器它也不起作用 .

如果我添加两个启动器,我可以解决非阻塞功能吗?我用Gatling执行了一些压力测试,我收到了相同的分数,删除了web启动器或添加它 .

对此有何帮助?

1 回答

  • 3

    如果将 spring-boot-starter-webspring-boot-starter-webflux 都添加到应用程序中,Spring Boot会将其配置为Spring MVC应用程序 .

    这是故意的,因为许多Spring MVC将获得webflux依赖,以在其MVC应用程序中利用新的 WebClient . 此外,从Spring Framework 5开始,Spring MVC知道如何在控制器级别处理Flux的一些情况 .

    您可以随时强制选择:

    SpringApplication app = new SpringApplication(MyApplication.class);
    app.setWebApplicationType(WebApplicationType.REACTIVE);
    app.run(...);
    

    在你的情况下,这不是强迫选择,而是使用WebFlux不支持的东西 .

    server.servlet.context-path 配置属性是特定于Servlet的,所以它在提供这样的属性时没有任何意义 .

    使用Spring的"Servlet-based"和Reactive运行时之间的运行时模型差异可能非常微妙,我鼓励您观看talk that describes those choices . 简短的回答是:如果你使用带有异步类型的Spring MVC( DeferredResultFluxSseEmitter ),事情将是异步的,但读写仍然会被阻塞 .

    正确地进行基准测试非常困难,但您所看到的结果在某种程度上是预期的 . 运行本地服务器客户端,不涉及延迟,查看原始吞吐量 - 所有这些约束不应该支持具有并发成本的响应模型 . 如果有的话,这个基准测试表明反应堆栈已经非常优化,即使对于非理想的用例!

相关问题