spring5——2.webflux,响应式编程,执行流程及核心API

  • Post author:
  • Post category:其他




什么是响应式编程

在计算机中,响应式编程或反应式编程(英语:Reactive programming)是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。



观察者模式

java8及其之前提供了观察者模式的两个类,Observer和Observable(为什么说他是伪响应式编程)



代码演示
public class ObserverDemo extends Observable {
 public static void main(String[] args) {
 ObserverDemo observer = new ObserverDemo();
 //添加观察者
 observer.addObserver((o,arg)->{
 System.out.println("发生变化");
 });
 observer.addObserver((o,arg)->{
 System.out.println("手动被观察者通知,准备改变");
 });
 observer.setChanged(); //数据变化
 observer.notifyObservers(); //通知
 } }

java9及以后版本提供了,Flow类(subcribe订阅,publish发布)



Reactor实现 响应式编程

满足Reactive规范的架构

Reactor有两个核心类,mono和flux,这两个类都实现了Publisher,提供了丰富的操作符。Flux实现发布者,返回n个元素;Mono实现发布者,返回一个或0个元素。

Flux和Mono都是数据流的发布者,使用Flux和Mono都可以发出三种数据信号(元素值,错误信号,完成信号)(错误信号和完成信号都代表终止信号,错误信号终止数据流时火把错误信息传递给订阅者)



代码演示Flux和Mono

第一步,引入依赖

<dependency>
	<groupId>io.projectreactor</groupId>
	<artifactId>reactor-core</artifactId>
	<version>3.1.5.RELEASE</version>
</dependency>

TestReactor

//生成Reactor规范的对象
Flux.just(var ... args);
Mono.just(var arg);

Flux.fromArray(array);

Flux.fromStream(stream);

Flux.fromIterable(collection);



数据流,三种数据信号(元素值,错误信号,完成信号)特点

  • 错误信号和完成信号只能存在一个。
  • 没有元素值,表示这个流是空数据流
  • 没有终止信号,表示这个流是无限数据流
  • 操作符只用于加工数据(就是方法,map(多个元素映射为新的多个元素),flatMap(多个元素映射(合并)为一个流))

数据流订阅后才会执行。



springwebflux执行流程和核心API

springwebflux基于Reactor,默认容器是Netty,Netty是高性能,NIO框架,异步非阻塞的框架。



SpringWebFlux执行过程

springwebflux核心控制器DispatcherHandler,实现了WebHandler

其他组件

HandlerMapping:通过客户端请求查询处理方法

HandlerAdapter:负责请求处理,实现具体业务方法

HandlerResultHandler:负责响应结果,处理结果



实现函数式编程API(RouterFunction,HandlerFunction)

RouterFunction:(路由处理:处理请求,找到方法)

HandlerFunction:(函数处理:处理请求,响应函数)



版权声明:本文为weixin_47798423原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。