关于WebFlux响应式Web框架

469 阅读2分钟

WebFlux介绍

  • WebFlux随spring 5推出的响应式web框架,基于响应式流Http/Reactive streams,用来建立异步、非阻塞、事件驱动的服务,使用Reactor作为首选的响应式流的实现库(reactor-core dependency)
  • 运行在支持异步的环境上,Netty/Undertow,也可运行在支持异步io的servlet3.1上,比如Tomcat和Jetty。
  • 对于Servlet3.0后,提供异步处理支持。假设Tomcat最大线程数200,3.0前最多允许200个线程同时并发处理,201个处理不了,因为前200个都阻塞;
    而3.0之后,类似于Netty,有一个boss线程池和work线程池,boss只负责接受请求,将请求转发到work,让work负责处理逻辑,因此就算处理非常耗时,也只是阻塞了work线程,当再来的请求,依然可以处理。
    好处在于针对处理耗时的情况,减少服务器资源的占用,提高并发处理速度

  • 性能:少线程和较少内存实现并发支持,但对于请求耗时影响不大
  • 基于注解的控制器@Controller/@RestController/@RequestBody/@RequestMapping等,返回值0/1个用Mono,0-N个用Flux

WebFlux使用场景

  • 假如spring mvc需要调用远程服务,可以用webclient,可以直接从controller中返回reactive类型,每次调用之间的相互依赖越大,好处越大
  • 微服务架构中,可以混合使用MVC和webflux,都支持注解
  • 已有spring mvc或阻塞性持久化API(JPA/JDBC)/DB,如mysql,不建议用
  • 使用全套reactive repositories非阻塞技术栈redis/mongodb/cassandra,或lambda表达式+函数式风格
  • 端到端的响应式编程,WebFlux+响应式地操作数据库,目前JDBC等待数据库返回数据,还是阻塞式的