幻仿编程 Udemy 付费课程,独家中英字幕 + 配套资料!
限时1折特惠!课程永久访问权,随时随地学习!
使用 Project Reactor 在现代 Java 中进行反应式编程
学习使用反应式编程原理和反应堆编写快速执行的异步和非阻塞代码。
讲师:Pragmatic Code School
您将学到什么
- 什么是反应式编程?
- 何时使用反应式编程?
- 使用 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
- Project Reactor 简介
- 反应器反应类型 – Flux 和 Mono
第 4 部分:设置本课程的项目
- 在本节中,我将设置本课程其余部分将使用的基础项目。
第 5 节:现代 Java 中的函数式编程
- 在本节中,我将解释函数式编程以及这种编程风格带来的好处 命令式风格 vs 函数式风格
- 命令式风格 vs 函数式风格
第 6 节:创建第一个 Flux 和 Mono
- 在本节中,我将使用简单示例来编码并解释反应器类型 Flux 和 Mono
- 本讲座涵盖以下主题: 让我们编写第一个 Flux 让我们写第一个 Mono 响应式流事件 使用 JUnit5 测试 Flux
- 让我们编写第一个 Flux
- 让我们写第一个 Mono
- 响应式流事件
- 使用 JUnit5 测试 Flux
第 7 节:Flux 和 Mono 的转换
- 在本节中,我将编写代码并解释使用项目反应器将数据从一种形式转换为另一种形式的不同运算符
- 本节涵盖以下主题: 使用 Project Reactor 中的运算符转换数据 使用 map() 运算符进行转换 反应流是不可变的 使用 filter() 运算符进行过滤 使用 flatMap() 运算符进行高级转换 使用 flatMap() 运算符进行异步操作 使用 concatMap() 运算符进行高级转换 Mono 中的 flatMap() 运算符 Mono 中的 flatMapMany() 运算符 使用 transform() 运算符进行转换 使用 defaultIfEmpty 和 switchIfEmpty() 运算符处理空数据
- 使用 Project Reactor 中的运算符转换数据
- 使用 map() 运算符进行转换
- 反应流是不可变的
- 使用 filter() 运算符进行过滤
- 使用 flatMap() 运算符进行高级转换
- 使用 flatMap() 运算符进行异步操作
- 使用 concatMap() 运算符进行高级转换
- Mono 中的 flatMap() 运算符
- Mono 中的 flatMapMany() 运算符
- 使用 transform() 运算符进行转换
- 使用 defaultIfEmpty 和 switchIfEmpty() 运算符处理空数据
第 8 节:结合 Flux 和 Mono
- 在本节中,我将编写代码并解释可用于使用项目反应器组合反应流的不同运算符
- 本节涵盖以下主题: 组合反应流简介 使用merge()和mergeWith()操作符合并响应式流 使用mergeSequential()操作符组合响应式流 使用 zip 和 zipWith() 运算符组合反应流
- 组合反应流简介
- 使用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 中的错误处理运算符
- 响应式流中的异常
- 异常处理运算符简介
- onErrorReturn() :异常处理运算符
- onErrorResume() :异常处理操作符
- onErrorContinue() :异常处理操作符
- onErrorMap() :异常处理运算符
- doOnError() :捕获异常并抛出错误
- Mono 中的错误处理运算符
第 12 节:在电影反应服务中实现异常处理
- 在本节中,我将实现 MoviesReactiveService 中的异常处理。 使用 onErrorMap 处理 MoviesReactiveService 中的异常 使用 Mockito 测试 MoviesReactiveService 中的异常
- 使用 onErrorMap 处理 MoviesReactiveService 中的异常
- 使用 Mockito 测试 MoviesReactiveService 中的异常
第 13 节:使用 retry()、retryWhen()、repeat() 进行重试和重复
- 在本节中,我将使用 Project Reactor 编写并实现不同的技术来重试 Reactive Streams 中的异常
- 本节涵盖以下主题: 使用 retry() 和 retry(n) 重试异常 使用 retryWhen() 重试特定异常 使用 repeat() 和 repeat(n) 重复一个序列 重复一个序列 repeatWhen()
- 使用 retry() 和 retry(n) 重试异常
- 使用 retryWhen() 重试特定异常
- 使用 repeat() 和 repeat(n) 重复一个序列
- 重复一个序列 repeatWhen()
第 14 节:Reactors 执行模型 – 调度程序、线程和线程池
- 在本节中,我将解释项目反应器背后的线程和执行模型
- 本节涵盖以下主题: Reactor 执行模型 使用 publishOn() 切换线程 使用 subscribeOn() 切换线程
- Reactor 执行模型
- 使用 publishOn() 切换线程
- 使用 subscribeOn() 切换线程
第 15 节:在 MovieReactiveService 中进行阻塞调用
- 在本节中,我们将通过在管道中添加阻塞调用来增强 MoviesReactive 服务。 在 MovieReactiveService 中进行阻塞调用 在本讲座中,我们将编写代码并学习如何使用项目反应器进行阻塞调用
- 在 MovieReactiveService 中进行阻塞调用 在本讲座中,我们将编写代码并学习如何使用项目反应器进行阻塞调用
- 在本讲座中,我们将编写代码并学习如何使用项目反应器进行阻塞调用
第 16 节:背压
- 在本节中,我将解释反应式编程中的背压概念
- 本节涵盖以下主题: 背压简介 让我们实现 BackPressure 为 BackPressure 编写 JUnit 测试 使用 onBackpressureDrop() 处理背压 使用 onBackpressureBuffer() 处理背压 使用 onBackpressureError() 处理背压
- 背压简介
- 让我们实现 BackPressure
- 为 BackPressure 编写 JUnit 测试
- 使用 onBackpressureDrop() 处理背压
- 使用 onBackpressureBuffer() 处理背压
- 使用 onBackpressureError() 处理背压
第 17 节:探索 Project Reactor 中的数据并行性
- 在本节中,我将解释如何在反应式管道中引入并行性
- 本节涵盖以下主题: 使用 parallel() 和 runOn() 运算符实现并行 使用 flatmap() 运算符实现并行 使用 flatMapSequential() 运算符实现并行
- 使用 parallel() 和 runOn() 运算符实现并行
- 使用 flatmap() 运算符实现并行
- 使用 flatMapSequential() 运算符实现并行
第 18 节:冷流与热流
- 在本节中,我将解释反应式编程中的冷流和热流
- 本节涵盖以下主题: 冷热流 冷溪 热流 – ConnectableFlux 和不同选项
- 冷热流
- 冷溪
- 热流 – ConnectableFlux 和不同选项
第 19 节:使用 VirtualTimeScheduler 进行 JUnit 测试
- 在本节中,我将解释如何使用 VirtualTimer 来减少测试用例的执行时间。 使用 VirtualTimeScheduler 的 StepVerifier
- 使用 VirtualTimeScheduler 的 StepVerifier
第 20 节:使用 WebClient 构建非阻塞 RestClient
- 在本节中,我们将使用 Spring WebClient 编写一个非阻塞 rest 客户端
- 本节涵盖以下主题: 响应式影片 API 概述 构建非阻塞 MovieInfoService RestClient 构建非阻塞 Review RestClient 构建 getAllMovies 非阻塞 MovieReactiveService 客户端 构建 getMovieById 非阻塞 MovieReactiveService 客户端 集成 WireMock 进行集成测试
- 响应式影片 API 概述
- 构建非阻塞 MovieInfoService RestClient
- 构建非阻塞 Review RestClient
- 构建 getAllMovies 非阻塞 MovieReactiveService 客户端
- 构建 getMovieById 非阻塞 MovieReactiveService 客户端
- 集成 WireMock 进行集成测试
第 21 节:以编程方式创建 Flux
- 在本节中,我将编写代码并解释可用于以编程方式创建通量的技术。
- 本节涵盖以下主题: 使用 create() 创建 Flux 使用 push() 创建 Flux
- 使用 create() 创建 Flux
- 使用 push() 创建 Flux
第 22 节:在 Project Reactor 中调试
- 在本节中,我将演示调试反应堆错误消息时可用的不同方法。
- 本节涵盖以下主题: 使用“检查点”运算符调试异常 使用 Hooks.onOperatorDebug() 调试异常 使用“ReactorDebugAgent”进行生产就绪的全局调试
- 使用“检查点”运算符调试异常
- 使用 Hooks.onOperatorDebug() 调试异常
- 使用“ReactorDebugAgent”进行生产就绪的全局调试
在本课程结束时,您将全面了解反应式编程,使用反应式编程原则编写代码,以及何时在您的项目中使用它们。
本课程适合哪些人:
- 任何有兴趣探索反应式编程的 Java 开发人员
- 任何需要在高负载下编写快速执行代码的 Java 开发人员
- 任何有兴趣学习“React”反应式编程库所有功能的 Java 开发人员
| 共 87 节课程 • 总时长 7 小时 43 分钟 | |
| 第一章 介绍 | |
| 1. 课程介绍与目标 | 2分16秒 |
| 2. 前提条件 | 55秒 |
| 第二章 响应式编程导论 | |
| 1. 为什么响应式编程 | 8分42秒 |
| 2. 什么是响应式编程 | 6分43秒 |
| 3. 响应式流介绍 | 5分33秒 |
| 第三章 开始使用 Project Reactor | |
| 1. 项目Reactor简介 | 3分12秒 |
| 2. 反应堆响应式类型 – Flux 和 Mono | 7分16秒 |
| 第四章 为本课程设置项目 | |
| 1. 项目设置 | 5分30秒 |
| 第五章 现代Java中的函数式编程 | |
| 1. 命令式风格与函数式风格 | 14分52秒 |
| 第六章 让我们创建我们的第一个Flux和Mono。 | |
| 1. 让我们写我们的第一个Flux。 | 4分28秒 |
| 2. 让我们写下我们的第一个Mono。 | 2分35秒 |
| 3. 响应式流事件 | 3分50秒 |
| 4. 使用JUnit5测试Flux | 6分25秒 |
| 第七章 转换Flux和Mono | |
| 1. 使用map()操作符转换 | 3分54秒 |
| 2. 使用 Project Reactor 中的操作符转换数据 | 1分26秒 |
| 3. 响应式流是不可变的 | 3分26秒 |
| 4. 使用filter()操作符过滤 | 5分16秒 |
| 5. 使用flatMap()操作符进行高级转换 | 6分45秒 |
| 6. 使用flatMap()操作符进行异步操作 | 5分35秒 |
| 7. 使用 concatMap() 操作符进行高级转换 | 3分48秒 |
| 8. flatMap() 操作符在Mono中 | 5分25秒 |
| 9. flatMapMany( ) 操作符在 Mono(1) | 2分38秒 |
| 10. flatMapMany() 操作符在 Mono 中 | 2分38秒 |
| 11. 使用transform()操作符转换 | 4分22秒 |
| 12. 使用defaultIfEmpty和switchIfEmpty()操作符处理空数据 | 6分29秒 |
| 第八章 结合Flux和Mono | |
| 1. 结合Reactive Streams的介绍 | 1分2秒 |
| 2. concat() & concatWith() 运算符 | 6分26秒 |
| 3. 使用merge()和mergeWith()操作符组合Reactive Streams | 5分57秒 |
| 4. 使用 mergeSequential() 运算符合并 Reactive Streams | 2分15秒 |
| 5. 使用 zip 和 zipWith() 操作符组合 Reactive Streams | 10分34秒 |
| 第九章 使用 Project Reactor 构建 Movie ReactiveService | |
| 1. 电影服务概述 | 6分7秒 |
| 2. 检索所有MovieInfo | 12分7秒 |
| 3. 根据movieId检索MovieInfo | 6分33秒 |
| 第十章 在回调中执行 – 深入了解序列 | |
| 1. 在回调中执行 | 8分13秒 |
| 第11章 异常处理在Flux和Mono中 | |
| 1. Reactive Streams中的异常 | 6分51秒 |
| 2. 异常处理操作符介绍 | 1分24秒 |
| 3. onErrorReturn() 异常处理操作符 | 4分28秒 |
| 4. onErrorResume() 异常处理操作符 | 7分27秒 |
| 5. onErrorContinue() 异常处理操作符(1) | 5分52秒 |
| 6. onErrorContinue() 异常处理操作符 | 5分52秒 |
| 7. onErrorMap() 异常处理操作符 | 5分22秒 |
| 8. doOnError() 捕获异常并抛出错误 | 5分14秒 |
| 9. Mono中的错误处理运算符 | 3分37秒 |
| 第12章 在电影反应式服务中实现异常处理 | |
| 1. 异常处理在MoviesReactiveService中使用onErrorMap | 3分10秒 |
| 2. 在MoviesReactiveService中用Mockito测试异常(1) | 7分10秒 |
| 3. 在MoviesReactiveService中用Mockito测试异常 | 7分10秒 |
| 第13章 重试,使用retry()、retryWhen()、repeat() | |
| 1. 使用retry()和retry(n)重试异常 | 6分22秒 |
| 2. 使用retryWhen()重试特定异常 | 9分23秒 |
| 3. 使用repeat()和repeat(n)重复序列 | 4分17秒 |
| 第14章 反应堆执行模型 – 调度器、线程和线程池 | |
| 1. 反应堆执行模型 | 7分19秒 |
| 2. 使用publishOn()切换线程 | 9分39秒 |
| 3. 使用subscribeOn()切换线程 | 6分12秒 |
| 第15章 在MovieReactiveService中进行阻塞调用 | |
| 1. 在MovieReactiveService中执行阻塞调用 | 8分24秒 |
| 第16章 背压 | |
| 1. 背压介绍 | 2分43秒 |
| 2. 让我们实现BackPressure | 6分15秒 |
| 3. 编写JUnit测试用例以测试backPressure | 5分30秒 |
| 4. 使用onBackpressureDrop()处理背压 | 4分54秒 |
| 5. 使用 onBackpressureBuffer() 处理背压(1) | 4分8秒 |
| 6. 使用onBackpressureBuffer()处理背压 | 4分8秒 |
| 7. 使用onBackpressureError()处理背压 | 2分29秒 |
| 第17章 探索 Project Reactor 中的数据并行性 | |
| 1. 使用parallel()和runOn()操作符的并行处理 | 8分7秒 |
| 2. 使用flatMap()操作符的并行处理 | 4分53秒 |
| 3. 使用flatMapSequential()操作符进行并行处理 | 2分43秒 |
| 第18章 冷流 & 热流 | |
| 1. 冷流与热流 | 2分4秒 |
| 2. 冷流 | 2分13秒 |
| 3. 热流 – 可连接通量 | 5分56秒 |
| 4. 热流 – 可连接通量使用 autoConnect 和 RefCount | 7分39秒 |
| 第19章 使用VirtualTimeScheduler进行测试 | |
| 1. 使用VirtualTimeScheduler的StepVerifier | 3分34秒 |
| 第20章 构建NonBlocking RestClient使用WebClient | |
| 1. Reactive Movie API 概述 | 5分32秒 |
| 2. 构建非阻塞MovieInfoService RestClient | 5分24秒 |
| 3. 使用StepVerifier和JUnit进行非阻塞客户端单元测试 | 3分42秒 |
| 4. 构建非阻塞的MovieInfoService RestClient – 根据ID获取MovieInfo | 2分37秒 |
| 5. 构建非阻塞 Review RestClient | 3分54秒 |
| 6. 构建非阻塞的 MovieReactiveService 客户端获取所有电影(1) | 6分24秒 |
| 7. 构建非阻塞的MovieReactiveService客户端获取所有电影 | 6分24秒 |
| 8. 构建非阻塞的MovieReactiveService客户端以获取MovieById | 2分21秒 |
| 第21章 程序化创建一个FluxMono | |
| 1. 创建 FluxMono 的不同选项 | 2分51秒 |
| 2. 使用 generate() 创建 Flux | 6分59秒 |
| 3. 使用create()(1)(1)创建一个Flux | 11分4秒 |
| 4. 使用create()(1)创建一个Flux | 11分4秒 |
| 5. 使用create()创建一个Flux | 11分4秒 |
| 6. 使用 create() 创建一个 Mono | 2分35秒 |
| 7. 使用 handle() 创建 Flux | 3分1秒 |
| 第22章 在Project Reactor中进行调试 | |
| 1. Project Reactor中的调试介绍 | 5分40秒 |
| 2. 使用 Hooks.onOperatorDebug() 调试异常 | 2分36秒 |
| 3. 使用检查点操作符调试异常 | 1分43秒 |
| 4. 使用ReactorDebugAgent进行生产就绪的全局调试 | 2分47秒 |
| 1. 关于课程更新与获取 如何获取本站课程? ○ 免费获取方式:在本站签到、评论、发布文章等可获取积分,通过积分购买课程。 ○ 付费获取方式:购买本站【月度会员】或【永久会员】。 课程购买后是否支持更新? ○ 是的,所有课程均提供免费更新服务。 我们致力于为您提供持续的学习支持。 如何获取更新? ○ 单独购买的课程: 您可在“个人中心”随时查看购买记录及最新下载链接,轻松获取免费更新。 ○ 永久会员: 您可在相关页面直接查看最新下载地址,随时免费获取更新。 ○ 非永久会员(重要提示):通过会员权限下载的课程,在“个人中心”可能不显示具体订单记录。 因此,会员到期后,您将无法通过“个人中心”查看最新下载链接。 ① 解决方案建议:续费会员: 恢复会员权限后,即可再次查看所有最新下载链接。 ② 妥善保存下载链接: 我们强烈建议您在会员有效期内,保存好本站分享的课程下载链接。通常,课程更新内容会直接补充到原有分享链接中。 |
| 2. 关于课程资料 课程下载后资料是否齐全? ○ 绝大部分课程资料齐全。 我们尽力确保您获得完整的学习资源。 ○ 少数情况说明: 极少数课程可能存在资料缺失情况。针对 Udemy 课程,资料形式多样,请知悉:本地文件(随视频下载): 此类课件通常随视频一并提供,下载即得。 ① 本地文件(含链接): 课件文件中会提供资料下载链接,您需自行访问链接下载。此类资料通常也可获取。 ② 在线平台存储(如 GitHub): 讲师会在视频中说明资料获取方式(如访问特定平台),请您按指引自行下载。 ③ Udemy 平台内资料: 部分资料需登录您在 Udemy 购买的账号才能查看。此类资料本站无法提供,除非您自行在 Udemy 平台购买该课程。 |
| 3. 关于课程字幕 是否提供中英文双字幕?原本无字幕的课程是否支持? ○ 是的,本站下载的所有课程均提供中英文双字幕,包括 Udemy 原本无任何字幕的课程。 我们致力于提升您的学习体验。 Udemy 字幕现状与本站服务: ○ Udemy 绝大多数课程本身不提供任何字幕。在少数提供字幕的课程中,也几乎不提供中文字幕。 本站字幕服务流程: ① Udemy 有字幕: 我们会将其翻译成中文字幕,与英文字幕一同提供。 ② Udemy 无字幕: 我们会通过技术手段识别生成英文字幕,再翻译成中文字幕,一同提供给您。 字幕服务重要说明(请您理解): ○ 翻译精度: 字幕翻译采用谷歌翻译引擎完成,虽不及人工翻译精准,但足以保障您正常学习理解。 ○ 若您仍然觉得字幕精度较低: 可联系站长针对性润色字幕(该服务仅限本站会员)。 |
| 4. 关于视频存储与使用 视频存储位置与观看/下载方式? 本站所有课程视频均存储于网盘平台。 您支持在线观看: 可在网盘内直接播放学习。 您支持下载: 可将视频下载至本地,使用播放器播放,更灵活便捷。 主要存储网盘:百度网盘 视频格式与加密情况? 本站所有课程视频均以 MP4 或 MKV 通用格式提供。 视频文件不加密,您可自由分享(请遵守相关法律法规)。 播放建议: 使用本地播放器(如 PotPlayer)播放时,可同时加载中英文字幕文件,学习体验更佳。您可参考我们提供的《PotPlayer 挂载中英双字幕教程》。 |
| 5. 关于售后支持与退款政策 遇到问题如何联系? 无论您在购买前或购买后遇到任何疑问,都欢迎随时联系站长。 我们将竭诚为您服务。 退款政策说明: 原则: 由于虚拟商品(课程、资料等)具有可复制性,一旦购买成功并完成下载,原则上不支持退款。 请您在购买前仔细阅读课程介绍、资料说明及本条款,确认符合您的需求。 如有不确定之处,欢迎先行咨询站长。 |



























暂无评论内容