怎么理解Java的回调与反应模式


这篇文章主要介绍“怎么理解Java的回调与反应模式”,在日常操作中,相信很多人在怎么理解Java的回调与反应模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解Java的回调与反应模式”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!客户端调用表示城市详细信息的目标服务有两个端口。当使用类型为——/cityids 的 URI 调用时,返回城市 id 列表,并且示例结果如下所示:一个端口返回给定其 ID 的城市的详细信息,例如,当使用 ID 为1——“/cities/1” 调用时:客户端的责任是获取城市 ID 的列表,然后对于每个城市,根据 ID 获取城市的详细信息并将其组合到城市列表中。我正在使用 Spring Framework 的 RestTemplate 进行远程调用。获取 cityId 列表的 Kotlin 函数如下所示:获取城市详情:鉴于这两个函数,它们很容易组合,以便于轻松返回城市列表 :代码很容易理解;但是,涉及八个阻塞调用:获取 7 个城市 ID 的列表,然后获取每个城市的详细信息获取 7 个城市的详细信息每一个调用都将在不同的线程上。我将使用 AsyncHttpClient 库来进行非阻塞 IO 调用。进行远程调用时,AyncHttpClient 返回 ListenableFuture 类型。可以将回调附加到 ListenableFuture 以在可用时对响应进行操作。鉴于 cityIds 的列表,我想获得城市的详细信息,因此从响应中,我需要进行更多的远程调用并为每个调用附加回调以获取城市的详细信息:这是一段粗糙的代码;回调中又包含一组回调,很难推理和理解 – 因此它被称为“回调地狱”。通过将 Java 的 CompletableFuture 作为返回类型而不是 ListenableFuture 返回,可以稍微改进此代码。CompletableFuture 提供允许修改和返回类型的运算符。例如,考虑获取城市 ID 列表的功能:在这里,我使用 thenApply 运算符将 CompletableFuture 转换为 CompletableFuture> 。同样的,获取城市详情:这是基于回调的方法的改进。但是,在这个特定情况下,CompletableFuture 缺乏有用的运算符,例如,所有城市细节都需要放在一起:使用了一个名为 CompletableFuture.allOf 的运算符,它返回一个“Void”类型,并且必须强制返回所需类型的 CompletableFuture>。Project Reactor 是 Reactive Streams 规范的实现。它有两种特殊类型可以返回 0/1 项的流和 0/n 项的流 – 前者是 Mono,后者是 Flux。Project Reactor 提供了一组非常丰富的运算符,允许以各种方式转换数据流。首先考虑返回城市 ID 列表的函 香港云主机数:我正在使用 Spring 优秀的 WebClient 库进行远程调用并获得 Project Reactor Mono 类型的响应,可以使用 flatMapMany 运算符将其修改为 Flux 类型。根据城市 ID,沿着同样的路线获取城市的详情:在这里,Project Reactor Mono 类型正在使用 flatMap 运算符转换为 Mono 类型。以及从中获取 cityIds,这是 City 的代码:这非常具有表现力 – 对比基于回调的方法的混乱和基于 Reactive Streams 的方法的简单性。到此,关于“怎么理解Java的回调与反应模式”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注开发云网站,小编会继续努力为大家带来更多实用的文章!

相关推荐: 如何理解spring加载类放到容器里面的过程

如何理解spring加载类放到容器里面的过程,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 工作三年,初探得Spring原理,现在分享一下从宏观上理解一下Spring启动是如何加载Bean的。…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 08/15 19:56
Next 08/15 19:56

相关推荐