image.png
image.png
《Spring Boot 2.0深度实践之核心技术篇》
DeferredResult自己管理线程

异步应用场景

浏览器向A系统发起请求,该请求需要等到B系统(如MQ)给A推送数据时,A才会立刻向浏览器返回数据;
如果指定时间内B未给A推送数据,则返回超时。


DeferredResult

image.png

Tomcat等应用服务器的连接线程池实际上是有限制的;每一个连接请求都会耗掉线程池的一个连接数;如果某些耗时很长的操作,如对大量数据的查询操作、调用外部系统提供的服务以及一些IO密集型操作等,会占用连接很长时间,这个时候这个连接就无法被释放而被其它请求重用。如果连接占用过多,服务器就很可能无法及时响应每个请求;极端情况下如果将线程池中的所有连接耗尽,服务器将长时间无法向外提供服务!

【小家Spring】高性能关键技术之—-体验Spring MVC的异步模式(Callable、WebAsyncTask、DeferredResult) 基础使用篇 - 云+社区 - 腾讯云
DeferredResult原理
DeferredResultMethodReturnValueHandler

异步调用的filter和interceptor

  • filter可以正常使用
  • interceptor的pre会调用两次

image.png

AsyncHandlerInterceptor

image.png

异步所产生的三个问题:filter、ThreadLocal、Exception