spring boot webflux
什么是函数式
函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。lambda表达式对与大多数程序员已经很熟悉了,jdk8以及es6都是引入lambda。
特性:
1.惰性计算
2.函数是“第一等公民”
3.只使用表达式而不使用语句
4.没有副作用
什么是响应式:
Spring官方文档: In plain terms reactive programming is about non-blocking applications that are asynchronous and event-driven and require a small number of threads to scale vertically (i.e. within the JVM) rather than horizontally (i.e. through clustering).
简单来说响应式编程是关于异步的事件驱动的需要少量线程的垂直扩展而非水平扩展的无阻塞应用
我的理解是以不变应万变,呵呵呵,不太好理解。
名词解释:
1.Responsive: 可响应的。要求系统尽可能做到在任何时候都能及时响应。
2.Resilient: 可恢复的。要求系统即使出错了,也能保持可响应性。
3.Elastic: 可伸缩的。要求系统在各种负载下都能保持可响应性。
4.Message Driven:消息驱动的。要求系统通过异步消息连接各个组件。
什么是webFlux:
左侧是传统的基于Servlet的Spring Web MVC框架,右侧是5.0版本新引入的基于Reactive Streams的Spring WebFlux框架,从上到下依次是Router Functions,WebFlux,Reactive Streams三个新组件。
Router Functions: 对标@Controller,@RequestMapping等标准的Spring MVC注解,提供一套函数式风格的API,用于创建Router,Handler和Filter。
WebFlux: 核心组件,协调上下游各个组件提供响应式编程支持。
Reactive Streams: 一种支持背压(Backpressure)的异步数据流处理标准,主流实现有RxJava和Reactor,Spring WebFlux默认集成的是Reactor。
在Web容器的选择上,Spring WebFlux既支持像Tomcat,Jetty这样的的传统容器(前提是支持Servlet 3.1 Non-Blocking IO API),又支持像Netty,Undertow那样的异步容器。不管是何种容器,Spring WebFlux都会将其输入输出流适配成Flux格式,以便进行统一处理。
值得一提的是,除了新的Router Functions接口,Spring WebFlux同时支持使用老的Spring MVC注解声明Reactive Controller。和传统的MVC Controller不同,Reactive Controller操作的是非阻塞的ServerHttpRequest和ServerHttpResponse,而不再是Spring MVC里的HttpServletRequest和HttpServletResponse。
@GetMapping("/reactive/XX")
public Flux<T> findAll() {
return Repository.findAll();
}
可以看到主要变化就是在 返回的类型上Flux
Flux和Mono 是 Reactor 中的流数据类型,其中Flux会发送多次,Mono会发送0次或一次
⚠️:使用webflux需要具备的基础是Reactive programming 的理解。Reactor 的基础 和 熟练的java8 lambda使用
Talk is cheap, show me the code。
先展示代码:
好了,这是我17年的代码,git地址:spring boot webflux deno
无法跳转:https://code.aliyun.com/kayson_yang/spring5-demo