wordpress 更换字体,营口seo,wordpress 升级主题 主机名,iis 搭建网站SpringBoot响应式编程教程-WebFlux 前言正文一、Reactor1、核心概念2、核心特性 二、Spring Webflux与springmvc的组件对比 三、R2DBC 结语 前言
最近有个项目需要用到响应式编程#xff0c;一开始还是很懵的#xff0c;以为是网页的自适应#xff0c;通过部分文章的学习一开始还是很懵的以为是网页的自适应通过部分文章的学习有了基本了解但缺乏系统学习还是难以加以运用因此对其进行了学习并记录自认为比较重要的部分推荐你直接看课程笔记如下链接 #.# 本篇文章课程链接尚硅谷SpringBoot响应式编程教程2024最新springboot3入门到实战 课程笔记链接https://www.yuque.com/leifengyang/springboot3/rg4wqgdbg8mfv04q 课程代码链接https://gitee.com/leifengyang/reactor-programming.git webflux官网地址webflux官网地址
简单理解 替代 SpringMvc使用SpringWebFluxSpringWebFlux使用的容器也不在是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).xxx2、subscribe() 订阅 简单示例 Flux.range(1,10) // 生成一个1-10的流.handle((value,sink)-{System.out.println(拿到的值value);sink.next(张三value); //可以向下发送数据的通道}).log() //日志.subscribe(); // 订阅有了此操作流才会真正执行这里为空时订阅的默认流也可以订阅官方提供的订阅者或自定义订阅者// .subscribe(new BaseSubscriberString() {}); // 自己定义一个订阅者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 类似jdbcTemplateDatabaseClient
最佳实践 提升生产效率的做法
Spring Data R2DBC基础的CRUD用 R2dbcRepository 提供好了自定义复杂的SQL单表 Query多表查询复杂结果集 DatabaseClient 自定义SQL及结果封装 Query 自定义 Converter 实现结果封装
结语
学习完这次课程对响应式有了更深的理解但对比目前项目中的使用感觉还差不少还得查询相关资料学习响应式编程目前也还停留在摸索阶段很多公司都还没有使用但这个技术还是很有前瞻性的值得大家学习提早进行知识储备到时候好升职加薪呀