2025年webflux是什么(webflux入门)

webflux是什么(webflux入门)svg xmlns http www w3 org 2000 svg style display none svg

大家好,我是讯享网,很高兴认识大家。



 <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> 

讯享网

1.SpringWebFLux介绍

是Spring Framework提供的一种用户构建响应式Web应用程序的模块。它基于Reactive Streams标准,并使用了Reactor库来实现非阻塞、异步的编程模型

与传统的Spring MVC相比,Spring WebFlux采用了一种基于事件驱动的架构,可以处理更高的并发请求和负载。它不再依赖于Servlet容器,而是使用自己的服务器,例如Netty或Undertow,以实现异步、高效的请求处理。

Spring WebFlux提供了以下主要特性:

  1. 响应式编程模型:通过使用Reactive Streams和Reactor库,可以实现异步、非阻塞的编程方式,从而提高系统的吞吐量和性能。
  2. 注解驱动的编程模式:类似于Spring MVC,Spring WebFlux也支持基于注解的编程,通过注解控制器和路由函数,可以方便地定义请求映射、参数绑定和响应结果。
  3. 函数式端点定义:除了使用注解定义控制器,Spring WebFlux还支持使用函数式编程的方式定义端点。可以通过Router Functions来构建路由和处理请求,使代码更为简洁和灵活。
  4. 响应式数据流处理:Spring WebFlux中引入了Flux和Mono两个反应式类型,用于处理数据流。Flux表示一个包含0到N个元素的响应式序列,而Mono表示一个包含0或1个元素的响应式序列。这些类型可以用于处理异步数据流和流式操作。
1.1 什么是异步非阻塞
  • 异步和同步:

    异步和同步针对调用者,调用者发送请求,如果等待对方回应之后才继续执行去做其他事情就是同步,发送请求成功之后不等待对方回应直接去做其他事情就是非阻塞

  • 阻塞和非阻塞

    阻塞和非阻塞针对被调用者,调用者收到请求后,做完任务请求才给出反馈就是阻塞,收到请求之后马上给出反馈就是非阻塞

2.响应式编程

2.1 什么是响应式编程

响应式变成是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。电子表格程序就是响应式编程的一个例子。单元格可以包含字面或类似“B1+C1”的公司,而包含公式的值会依据其他单元格的值变化而变化;

响应式编程(Reactive Programming)是一种编程范式,旨在处理异步数据流和事件,并支持高效、可靠、可扩展的程序开发。它强调数据流的变化和传播,以及对这些变化作出相应的能力。

在响应式编程中,程序被看作是一组数据流和数据流之间的关系。数据流可以是来自用户输入、传感器、网络请求等的事件流或数据序列。响应式编程通过使用观察者模式(Observer Pattern)和函数式编程的概念,使得开发者可以定义对这些数据流进行监听和处理的逻辑。

响应式编程具有以下特点:


讯享网

  1. 异步和非阻塞:响应式编程鼓励使用非阻塞的方式处理数据流,以避免线程阻塞和资源浪费。它通过使用回调函数、Promise、Future等机制来处理异步操作。
  2. 数据流的变换和组合:响应式编程提供了丰富的操作符和转换函数,可以对数据流进行过滤、映射、聚合等各种操作。这些操作可以组合在一起,形成复杂的数据流处理逻辑。
  3. 响应式和自动更新:响应式编程使得程序能够自动地对数据流的变化作出相应。当输入数据流发生变化时,相关的处理逻辑会自动更新和重新执行。
  4. 错误处理和容错性:响应式编程提供了错误处理机制,可以方便地捕获和处理异常情况。它也支持容错性,通过使用重试、超时等策略来处理潜在的故障。

响应式编程有许多应用场景,特别是在需要处理大量实时数据、事件驱动的系统和用户界面开发中。它能够简化异步编程和事件处理的复杂性,并提供了一种可靠和高效的方式来处理数据流和事件流。

讯享网
2.2 Reactor实现
  1. Reactor 是一个基于 Java 8+ 的响应式编程框架,它提供了一种基于事件驱动、非阻塞的编程模型,旨在简化异步编程和处理流式数据。Reactor 的核心是 Reactor 类库,它实现了 Reactive Streams 规范,并提供了一系列用于构建响应式应用的工具和组件。
  2. Reactor有两个核心类,Mono和Flux,这两个类实现接口Publisher,提供丰富的操作符。Flux对象实现发布者,返回N个元素;Mono实现发布者,返回0或者1个元素;
  3. Flux 和 Mono:Flux 表示包含零个或多个元素的异步序列,而 Mono 表示包含零个或一个元素的异步序列。Flux 和 Mono 是 Reactor 中最基本的数据流表示,您可以对它们进行各种操作,比如映射、过滤、合并等。
  4. Flux和Mono都可以发送三种信号:

    元素值,错误信号,完成信号,错误信号和完成信号都代表终止信号,错误信号终止数据流同时把错误信息传递给订阅者

代码演示Flux和Mono:

 
  • 错误信号和完成信号都是终止信号,不能共存
  • 如果没有发送任何元素中,而是直接发送错误或者完成信号,则表示空数据流
  • 如果没有错误和完成信号,则表示无限数据流
  • 调用just或者其他方法只是声明数据流,数据流并没有发出,只有进行订阅之后才会触发数据流,不订阅subscribe什么都不会发生的
  1. 常用操作符

    map: 元素映射为新元素

    讯享网

    Filter 操作符:根据指定的条件筛选元素

     

    FlatMap 操作符:将流的每个元素转换为新流,然后将这些流平铺合并成单一流。

    讯享网

    Merge 操作符:将多个流合并为单一流。

     

    其他操作符等

    reduce:对流中的元素进行累积计算,返回一个单个的结果。
    take:从流中取出指定数量的元素。
    zip:将多个流的对应位置的元素进行配对。
    onErrorResume:在遇到错误时,返回一个备用的流。
    retry:在遇到错误时,重新尝试执行操作。

    timeout:设置一个超时时间,在指定时间内未完成操作,则抛出超时异常。

3. SpringWebFulx执行流程和核心API

SpringWebflux 处理请求流程图:ece3a110c4aecdbc81afaceb4e346d4d

SpringMvc处理请求流程图:

​ Spring Webflux 执行过程和Spring mvc相似,SpringWebflux核心控制器DispatchHandler,实现接口WebHanlder

​ 接口WebHanlder 有一个方法

讯享网
 

4.SpringWebflux (基于注解编程模型实现)

4.1导入包
讯享网
4.2实体类
 
4.3 Service类
讯享网
 
4.4 Controller
讯享网
4.5 测试结果

image-20240112165119247

image-20240112165152435

5.基于函数式编程实现

5.1 创建UserHandler
 
5.2 测试
讯享网

小讯
上一篇 2025-05-15 18:22
下一篇 2025-04-23 14:56

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/203956.html