使用Project Reactor在现代Java中进行响应式编程 | Reactive Programming in Modern Java using Project Reactor

使用Project Reactor在现代Java中进行响应式编程 | Reactive Programming in Modern Java using Project Reactor-幻仿编程
使用Project Reactor在现代Java中进行响应式编程 | Reactive Programming in Modern Java using Project Reactor
此内容为付费资源,请付费后查看
39.9
立即购买
您当前未登录!建议登陆后购买,可保存购买订单
付费资源
资源分类: Java查看预览
最近更新: 2024-12-28文件内容: 视频+中英文字幕+配套课件
视频分辨率: 720P 准高清文件大小: 1.92GB
视频语言: 英语视频字幕: 中英字幕

幻仿编程 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 和 Mono7分16秒
第四章 为本课程设置项目
1. 项目设置5分30秒
第五章 现代Java中的函数式编程
1. 命令式风格与函数式风格14分52秒
第六章 让我们创建我们的第一个Flux和Mono。
1. 让我们写我们的第一个Flux。4分28秒
2. 让我们写下我们的第一个Mono。2分35秒
3. 响应式流事件3分50秒
4. 使用JUnit5测试Flux6分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 Streams5分57秒
4. 使用 mergeSequential() 运算符合并 Reactive Streams2分15秒
5. 使用 zip 和 zipWith() 操作符组合 Reactive Streams10分34秒
第九章 使用 Project Reactor 构建 Movie ReactiveService
1. 电影服务概述6分7秒
2. 检索所有MovieInfo12分7秒
3. 根据movieId检索MovieInfo6分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中使用onErrorMap3分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. 让我们实现BackPressure6分15秒
3. 编写JUnit测试用例以测试backPressure5分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 和 RefCount7分39秒
第19章 使用VirtualTimeScheduler进行测试
1. 使用VirtualTimeScheduler的StepVerifier3分34秒
第20章 构建NonBlocking RestClient使用WebClient
1. Reactive Movie API 概述5分32秒
2. 构建非阻塞MovieInfoService RestClient5分24秒
3. 使用StepVerifier和JUnit进行非阻塞客户端单元测试3分42秒
4. 构建非阻塞的MovieInfoService RestClient – 根据ID获取MovieInfo2分37秒
5. 构建非阻塞 Review RestClient3分54秒
6. 构建非阻塞的 MovieReactiveService 客户端获取所有电影(1)6分24秒
7. 构建非阻塞的MovieReactiveService客户端获取所有电影6分24秒
8. 构建非阻塞的MovieReactiveService客户端以获取MovieById2分21秒
第21章 程序化创建一个FluxMono
1. 创建 FluxMono 的不同选项2分51秒
2. 使用 generate() 创建 Flux6分59秒
3. 使用create()(1)(1)创建一个Flux11分4秒
4. 使用create()(1)创建一个Flux11分4秒
5. 使用create()创建一个Flux11分4秒
6. 使用 create() 创建一个 Mono2分35秒
7. 使用 handle() 创建 Flux3分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. 关于售后支持与退款政策

遇到问题如何联系?
无论您在购买前或购买后遇到任何疑问,都欢迎随时联系站长。 我们将竭诚为您服务。

退款政策说明:
原则: 由于虚拟商品(课程、资料等)具有可复制性,一旦购买成功并完成下载,原则上不支持退款。

请您在购买前仔细阅读课程介绍、资料说明及本条款,确认符合您的需求。 如有不确定之处,欢迎先行咨询站长。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容