WebFlux web和webflux启动器

时间:2017-12-15 14:45:44

标签: spring-webflux

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

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

对此有何帮助?

1 个答案:

答案 0 :(得分: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的,因此它不能与WebFlux一起使用。目前,Spring Boot不支持战争部署,也不支持WebFlux应用程序的多个Web上下文。因此,提供这样的财产毫无意义。

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

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