SpringBoot响应式编程教程-WebFlux

本文介绍了SpringBoot中的响应式编程技术,重点讲解了Reactor的核心概念、特性,以及与SpringMvc的组件对比,并提到了R2DBC在支持响应式编程中的作用。作者强调了学习响应式编程的重要性,虽然还在探索阶段,但具有前瞻性价值。
摘要由CSDN通过智能技术生成

前言

最近有个项目需要用到响应式编程,一开始还是很懵的,以为是网页的自适应,通过部分文章的学习,有了基本了解,但缺乏系统学习还是难以加以运用,因此对其进行了学习,并记录自认为比较重要的部分,推荐你直接看课程笔记,如下链接 #.#
本篇文章课程链接:尚硅谷SpringBoot响应式编程教程,2024最新springboot3入门到实战
课程笔记链接:https://www.yuque.com/leifengyang/springboot3/rg4wqgdbg8mfv04q
课程代码链接:https://gitee.com/leifengyang/reactor-programming.git
webflux官网地址:webflux官网地址

简单理解:
替代 SpringMvc,使用SpringWebFlux,SpringWebFlux使用的容器也不在是Tomcat,而是用的netty,与之相应的框架也需要支持响应式,mybatis、jdbc等不支持响应式就不能使用了。 好处:天然支持高并发,资源利用率很高,较低配置就能实现高的并发。

原来的阻塞式编程: 浏览器 --> Controller --> Service --> Dao
响应式编程:Dao(数据发布者) --> Service --> Controller --> 浏览器

学习前提: 需掌握 java8 lambda 表达式相关操作

正文

一、Reactor

官方介绍: Reactor 是一个用于JVM的完全非阻塞的响应式编程框架,具备高效的需求管理(即对 “背压(backpressure)”的控制)能力。它与 Java 8 函数式 API 直接集成,比如 CompletableFuture, Stream, 以及 Duration。它提供了异步序列 API Flux(用于[N]个元素)和 Mono(用于 [0|1]个元素),并完全遵循和实现了“响应式扩展规范”(Reactive Extensions Specification)。
Reactor 的 reactor-ipc 组件还支持非阻塞的进程间通信(inter-process communication, IPC)。 Reactor IPC 为 HTTP(包括 Websockets)、TCP 和 UDP 提供了支持背压的网络引擎,从而适合 应用于微服务架构。并且完整支持响应式编解码。
可以将其简单的理解为 MQ 操作,请求先放到队列,然后在依次处理。

历史背景: 在响应式编程方面,微软跨出了第一步,它在 .NET 生态中创建了响应式扩展库(Reactive Extensions library, Rx)。接着 RxJava 在JVM上实现了响应式编程。后来,在 JVM 平台出现了一套标准的响应式 编程规范,它定义了一系列标准接口和交互规范。并整合到 Java 9 中(使用 Flow 类)

1、核心概念

1、订阅:在订阅者(Subscriber)订阅(subscribe)到一个 发布者(Publisher)之前,什么都不会发生。

2、背压:请求进来,先放到队列,线程主动获取处理,当请求过多时,也不会崩溃。

3、热(Hot) vs 冷(Cold)

热(Hot):对于每一个 Subscriber,都会收到从头开始所有的数据。如果源头 生成了一个 HTTP 请求,对于每一个订阅都会创建一个新的 HTTP 请求。不管流多久产生,后来的订阅者也会获取到数据
冷(Cold):相反,只能获取订阅后的数据,之前的就丢失了,不过注意,有些“热”的响应式流可以缓存部分或全部历史数据,又相当于“冷”的响应式流。

2、核心特性

1、Mono和Flux
Mono:代表 0或1 个数据流
Flux: 代表N个数据流
举例:

 Flux.just(1, 2, 0, 4).xxx

2、subscribe() 订阅
简单示例:

   
        Flux.range(1,10) // 生成一个1-10的流
                .handle((value,sink)->{
                    System.out.println("拿到的值:"+value);
                    sink.next("张三:"+value); //可以向下发送数据的通道
                })
                .log() //日志
                .subscribe(); // 订阅,有了此操作,流才会真正执行,这里为空时,订阅的默认流,也可以订阅官方提供的订阅者或自定义订阅者
               // .subscribe(new BaseSubscriber<String>() {}); // 自己定义一个订阅者

3、流的取消:消费者调用 cancle() 取消流的订阅;

4、错误处理:调用 onErrorReturn()、onErrorResume() 等方法,对异常错误进行处理

5、常用操作:filter、flatMap、concatMap、flatMapMany、transform、defaultIfEmpty、switchIfEmpty、concat、concatWith、merge、mergeWith、mergeSequential、zip、zipWith…

二、Spring Webflux

与springmvc的组件对比

在这里插入图片描述

下图就很直观的展示了两者之间的差异和联系,其实在使用层面(注解),基本都是一样的,以前怎么样,现在还怎么用。

在这里插入图片描述

三、R2DBC

前面讲到,如果要使用响应式编程,那么我们在开发过程中使用的所有组件都得支持响应式,而我们原来使用的jdbc就是不行的,R2DBC 是 Reactive Relational Database Connectivity。

组件:

  • R2dbcEntityTemplate 类似:jdbcTemplate
  • DatabaseClient

最佳实践: 提升生产效率的做法

  • Spring Data R2DBC,基础的CRUD用 R2dbcRepository 提供好了
  • 自定义复杂的SQL(单表): @Query;
  • 多表查询复杂结果集: DatabaseClient 自定义SQL及结果封装;
    @Query + 自定义 Converter 实现结果封装

结语

学习完这次课程,对响应式有了更深的理解,但对比目前项目中的使用,感觉还差不少,还得查询相关资料学习,响应式编程目前也还停留在摸索阶段,很多公司都还没有使用,但这个技术还是很有前瞻性的,值得大家学习,提早进行知识储备,到时候好升职加薪呀!!!

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Spring Boot中,可以使用响应式编程来构建应用程序。要使用响应式编程,您需要将spring-boot-starter-webflux模块添加到您的应用程序中。这个模块提供了Spring WebFlux框架,它是Spring对响应式编程的支持。 在添加了spring-boot-starter-webflux模块后,Spring Boot会自动配置Spring WebFlux,以适应大多数应用程序。这意味着您可以使用响应式的WebFlux注解和功能来构建您的应用程序。 但是,需要注意的是,如果您在应用程序中同时添加了spring-boot-starter-web和spring-boot-starter-webflux模块,Spring Boot会自动配置Spring MVC而不是WebFlux。这是因为许多Spring开发人员在他们的Spring MVC应用程序中添加了spring-boot-starter-webflux模块,以使用响应式的WebClient。 如果您想强制执行使用WebFlux,您可以将应用程序类型设置为WebApplicationType.REACTIVE。这样,Spring Boot将强制执行使用Spring WebFlux自动配置。 总结来说,要在Spring Boot中使用响应式编程,您需要添加spring-boot-starter-webflux模块到您的应用程序中。Spring Boot会自动配置Spring WebFlux以适应大多数应用程序。如果需要强制执行使用WebFlux,可以设置应用程序类型为WebApplicationType.REACTIVE。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SpringBoot响应式编程](https://blog.csdn.net/qq_29860591/article/details/103776555)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值