使用 Project Reactor 在现代 Java 中进行反应式编程
学习使用反应式编程原理和反应堆编写快速执行的异步和非阻塞代码。
讲师:Pragmatic Code School
双语IT资源独家Udemy付费课程,独家中英文字幕,配套资料齐全!
用不到1/10的价格,即可享受同样的高品质课程,且可以完全拥有,随时随地都可以任意观看和分享。
您将学到什么
- 什么是反应式编程?
- 何时使用反应式编程?
- 使用 Project Reactor 编写反应式代码
- Project Reactor 中的不同操作符
- 反应流规范
- 使用 Spring WebClient 构建非阻塞 Rest 客户端
- 使用 JUnit5 对反应式代码进行单元测试
- 反应类型 Flux/Mono
探索相关主题
- Java
- 响应式编程
- 编程语言
- 发展
要求
- 必须具备 Java 经验
- 拥有使用 JUnit 编写测试用例的经验
- 有使用 Intellij 或任何其他 IDE 的经验
描述
反应式编程是一种新的编程范式,非常适合需要在高负载下表现更好的应用程序。
响应式编程建立在响应式流规范的基础上。Project Reactor是响应式流规范的一个实现。
使用反应式编程编写的代码具有以下特点:
-
基本异步
-
非阻塞
-
函数式编程代码风格
-
背压支持
本课程旨在提供使用 Project Reactor 进行反应式编程的理论和实践知识。这是一门纯实践导向的课程,所有概念都通过编写代码来解释。
课程大纲:
第 1 部分:课程入门
-
本节介绍课程目标以及充分利用本课程所需的先决条件。
第 2 节:反应式编程简介
-
在本节中,我将向您介绍响应式编程及其相关概念。本节涵盖以下主题
-
为什么要采用反应式编程?
-
什么是反应式编程?
-
反应流简介
-
第 3 节:开始使用 Project Reactor
-
在本节中,我将向您介绍反应库项目 Reactor,以及构成 Project Reactor 基础的反应类型Flux和Mono
-
Project Reactor 简介
-
反应器反应类型 – Flux 和 Mono
-
第 4 部分:设置本课程的项目
-
在本节中,我将设置本课程其余部分将使用的基础项目。
第 5 节:现代 Java 中的函数式编程
-
在本节中,我将解释函数式编程以及这种编程风格带来的好处
-
命令式风格 vs 函数式风格
-
第 6 节:创建第一个 Flux 和 Mono
-
在本节中,我将使用简单示例来编码并解释反应器类型 Flux 和 Mono
-
本讲座涵盖以下主题:
-
让我们编写第一个 Flux
-
让我们写第一个 Mono
-
响应式流事件
-
使用 JUnit5 测试 Flux
-
第 7 节:Flux 和 Mono 的转换
-
在本节中,我将编写代码并解释使用项目反应器将数据从一种形式转换为另一种形式的不同运算符
-
本节涵盖以下主题:
-
使用 Project Reactor 中的运算符转换数据
-
使用 map() 运算符进行转换
-
反应流是不可变的
-
使用 filter() 运算符进行过滤
-
使用 flatMap() 运算符进行高级转换
-
使用 flatMap() 运算符进行异步操作
-
使用 concatMap() 运算符进行高级转换
-
Mono 中的 flatMap() 运算符
-
Mono 中的 flatMapMany() 运算符
-
使用 transform() 运算符进行转换
-
使用 defaultIfEmpty 和 switchIfEmpty() 运算符处理空数据
-
第 8 节:结合 Flux 和 Mono
-
在本节中,我将编写代码并解释可用于使用项目反应器组合反应流的不同运算符
-
本节涵盖以下主题:
-
组合反应流简介
-
使用merge()和mergeWith()操作符合并响应式流
-
使用mergeSequential()操作符组合响应式流
-
使用 zip 和 zipWith() 运算符组合反应流
-
第 9 节:使用 Project Reactor 构建 Movie ReactiveService
-
在本节中,我们将使用迄今为止学到的所有技能来构建 Reactive MovieService
-
MovieService 概述
-
检索所有 MovieInfo
-
通过 movieId 检索电影信息
第 10 节:doOn* CallBacks – 查看序列
-
在本节中,我将编写代码并解释查看发布者发出的各个事件的技术
第 11 节:Flux 和 Mono 中的异常/错误处理
-
在本节中,我将介绍 Project 反应器的不同异常处理策略
-
本节涵盖以下主题:
-
响应式流中的异常
-
异常处理运算符简介
-
onErrorReturn() :异常处理运算符
-
onErrorResume() :异常处理操作符
-
onErrorContinue() :异常处理操作符
-
onErrorMap() :异常处理运算符
-
doOnError() :捕获异常并抛出错误
-
Mono 中的错误处理运算符
-
第 12 节:在电影反应服务中实现异常处理
-
在本节中,我将实现 MoviesReactiveService 中的异常处理。
-
使用 onErrorMap 处理 MoviesReactiveService 中的异常
-
使用 Mockito 测试 MoviesReactiveService 中的异常
-
第 13 节:使用 retry()、retryWhen()、repeat() 进行重试和重复
-
在本节中,我将使用 Project Reactor 编写并实现不同的技术来重试 Reactive Streams 中的异常
-
本节涵盖以下主题:
-
使用 retry() 和 retry(n) 重试异常
-
使用 retryWhen() 重试特定异常
-
使用 repeat() 和 repeat(n) 重复一个序列
-
重复一个序列 repeatWhen()
-
第 14 节:Reactors 执行模型 – 调度程序、线程和线程池
-
在本节中,我将解释项目反应器背后的线程和执行模型
-
本节涵盖以下主题:
-
Reactor 执行模型
-
使用 publishOn() 切换线程
-
使用 subscribeOn() 切换线程
-
第 15 节:在 MovieReactiveService 中进行阻塞调用
-
在本节中,我们将通过在管道中添加阻塞调用来增强 MoviesReactive 服务。
-
在 MovieReactiveService 中进行阻塞调用
-
在本讲座中,我们将编写代码并学习如何使用项目反应器进行阻塞调用
-
-
第 16 节:背压
-
在本节中,我将解释反应式编程中的背压概念
-
本节涵盖以下主题:
-
背压简介
-
让我们实现 BackPressure
-
为 BackPressure 编写 JUnit 测试
-
使用 onBackpressureDrop() 处理背压
-
使用 onBackpressureBuffer() 处理背压
-
使用 onBackpressureError() 处理背压
-
第 17 节:探索 Project Reactor 中的数据并行性
-
在本节中,我将解释如何在反应式管道中引入并行性
-
本节涵盖以下主题:
-
使用 parallel() 和 runOn() 运算符实现并行
-
使用 flatmap() 运算符实现并行
-
使用 flatMapSequential() 运算符实现并行
-
第 18 节:冷流与热流
-
在本节中,我将解释反应式编程中的冷流和热流
-
本节涵盖以下主题:
-
冷热流
-
冷溪
-
热流 – ConnectableFlux 和不同选项
-
第 19 节:使用 VirtualTimeScheduler 进行 JUnit 测试
-
在本节中,我将解释如何使用 VirtualTimer 来减少测试用例的执行时间。
-
使用 VirtualTimeScheduler 的 StepVerifier
-
第 20 节:使用 WebClient 构建非阻塞 RestClient
-
在本节中,我们将使用 Spring WebClient 编写一个非阻塞 rest 客户端
-
本节涵盖以下主题:
-
响应式影片 API 概述
-
构建非阻塞 MovieInfoService RestClient
-
构建非阻塞 Review RestClient
-
构建 getAllMovies 非阻塞 MovieReactiveService 客户端
-
构建 getMovieById 非阻塞 MovieReactiveService 客户端
-
集成 WireMock 进行集成测试
-
第 21 节:以编程方式创建 Flux
-
在本节中,我将编写代码并解释可用于以编程方式创建通量的技术。
-
本节涵盖以下主题:
-
使用 create() 创建 Flux
-
使用 push() 创建 Flux
-
第 22 节:在 Project Reactor 中调试
-
在本节中,我将演示调试反应堆错误消息时可用的不同方法。
-
本节涵盖以下主题:
-
使用“检查点”运算符调试异常
-
使用 Hooks.onOperatorDebug() 调试异常
-
使用“ReactorDebugAgent”进行生产就绪的全局调试
-
在本课程结束时,您将全面了解反应式编程,使用反应式编程原则编写代码,以及何时在您的项目中使用它们。
本课程适合哪些人:
- 任何有兴趣探索反应式编程的 Java 开发人员
- 任何需要在高负载下编写快速执行代码的 Java 开发人员
- 任何有兴趣学习“React”反应式编程库所有功能的 Java 开发人员
如果你有能力,请务必支持课程的原创作者,这是他们应得的报酬!
本站收取的费用,仅用来维持网站正常运行的必要支出,从本站下载任何内容,说明你已经知晓并同意此条款。