首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理Callable、CompletableFuture和Flux

处理Callable、CompletableFuture和Flux
EN

Stack Overflow用户
提问于 2017-10-13 05:51:35
回答 2查看 1.7K关注 0票数 1

作为Spring5的看似Flux/Mono也可以是spring rest控制器的返回值方法。我看了spring参考指南4.3,阅读了关于如何处理Callable和DeferredResult (https://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/htmlsingle/#mvc-ann-async)的很好的描述,我还在一些博客文章中读到CompletableFuture也可以从控制器方法返回。如果这是真的,那么有谁能解释一下在Spring MVC中CompletableFuture和Flux/Mono是如何处理的?它们的处理方式是否与DeferredResult/Callable不同,即在外部线程中完成“处理”,然后Spring MVC将请求分派回DispatcherServlet (因此HTTP响应将写入servlet容器线程并在其上刷新)

EN

回答 2

Stack Overflow用户

发布于 2017-10-13 15:06:57

实际上,从Spring Framework5.0开始,Spring MVC可以在控制器处理程序中处理类似于Publisher的返回类型。根据返回类型的基数(一个或多个可能的值?),Spring MVC将通过:

如果返回异步集合,则返回单值;如果返回异步集合,则收集列表中的所有元素;如果要将数据流式传输到客户端,则收集列表中的所有元素;如果要将数据流式传输到客户端,则返回DeferredResult aDeferredResult或<

  • >D9DeferredResult<List<?>> >

F211

现在底层处理模型使用Servlet 3.0异步支持,将阻塞I/O操作移动到非容器线程,完成后再分派回容器。

另一方面,Servlet是完全异步和非阻塞的(使用Servlet3.1对WebFlux容器的支持);在这种情况下,将使用更少的线程。

有关这方面的更多信息,请访问the reference documentation

票数 0
EN

Stack Overflow用户

发布于 2017-10-25 18:17:11

这个视频很好地解释了spring mvc https://www.infoq.com/presentations/servlet-reactive-stack中发生的事情。简单地说,startAsync用于恢复(分派)到servlet线程,以写入(以阻塞的方式) servlet响应。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46719426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档