SpringBoot2.0不容错过的新特性 ——WebFlux响应式编程(1)

一、响应式编程的提出:

1、servlet3.1之后javaEE可以支持。

2、不需要很高的数据一致性,但是对于并发数和响应数很在意。

3、Java8之后,spring5发布了响应式的Web框架——Spring WebFlux(SpringBoot 2.x.x才可以支持)。

4、Spring WebFlux默认的实现方式(模型):RxJava和Reactor(默认)

5、响应式编程的关键字:数据流,异步,消息。

二、响应式编程的优点:

1、灵敏的(快速响应)

2、可恢复的(系统出现问题时,强大的容错机制和修复机制)

3、可伸缩的(任何压力下,都可以根据自身压力变化,请求少时,减少资源释放服务器压力。负载大的时候可以通过扩展算法和软硬件方式扩展服务能力)

4、消息驱动(响应式编程存在异步消息机制,事件之间的协作是通过消息进行连接的)

三、Reactor(反应器)模式

是一种基于事件的模型,对于服务器线程来说,它也是一种异步的。

客服端会向服务器注册其感兴趣的事件(Event),这样客户端就订阅了对应事件,只是订阅事件并不会给服务器发送请求。当客户端发生一些已经注册的事件时,就会触发服务器的响应。当触发服务器响应时,服务器存在一个Selector线程,这个线程只是负责轮询客户端发送过来的事件,并不处理请求,当它接收到有客户端事件的时候,就会找到对应的请求处理器(Request Handler),然后启用另外一条线程运行处理器。因为Selector只是做轮询并不处理业务,所以在轮询之后可以对请求做实时响应,速度很快。由于事件很多种,所以事件处理器也有很多,所以Selector存在一个路由的问题。当处理器处理完请求时,结果最终会转换为数据流发送到客户端。

扫描二维码关注公众号,回复: 4745167 查看本文章

四、Spring WebFlux 概述:

1、Servlet 3.1之前,Web容器都是基于阻塞机制开发的,Servlet 3.1(包含)就开始了非阻塞的规范。

2、Java8之后引入了Lambda表达式和Functional接口等特性。

3、对于响应式编程而言分为三层:

  1. Router Functions :是一个路由分发层。它会根据请求的事件,决定采用什么类的什么方法处理客户端的请求。相当于Selector
  2. Spring-webFlux:是一种控制层。它主要处理业务逻辑前进行的封装和控制数据流返回格式。
  3. Http/Reactive Streams:将结果转换为数据流

4、Spring WebFlux需要的是能够支持Servlet3.1+的容器,如TomCat,Jetty,Undertow,而在Java异步编程的领域,最常用的是Netty,而SpringBoot对Spring WebFlux的starter中默认是依赖Netty库的。         

5、Spring WebFlux的两种开发模式:一种是类似于Spring WebMVC的基于注解(@Controller、@RequestMapping)的开发模式,另外一种是Java 8 lambda 风格的函数式开发模式。

6、数据流的封装:Reactor提供的Flux和Mono都是封装数据的类。Flux封装0~N个数据流序列,响应式框架会一个接一个的把它们发送到客户端。Mono封装0~1个数据流序列。背压这个概念只针对于Flux。

猜你喜欢

转载自blog.csdn.net/mmx8112/article/details/85600037