使用Spring Reactor Core进行分散收集
我在使用Netflix Rx-Java库方面有良好的工作经验,并且以前曾写过关于使用Rx-Java和Java 8 CompletableFuture解决分散式问题的博客。 在这里,我想探索使用Spring Reactor Core库应用相同的模式。
tldr –如果您熟悉Netflix Rx-Java,您已经很熟悉Spring Reactor Core,API的地图,并且我很高兴看到Spring Reactor团队在Javadoc API中勤奋地使用了Marble图。
另一个快速点是, rx.Observable根据是否要发射许多项目或是否要发射一个项目来映射到Flux或Mono 。
有了这个,我可以直接进入示例–我执行了一个简单的任务(使用延迟模拟),该任务被生成了几次,我需要同时执行这些任务,然后收集结果,使用rx表示如下。可观察的代码:
@Test
public void testScatterGather() throws Exception {ExecutorService executors = Executors.newFixedThreadPool(5);List<Observable<String>> obs =IntStream.range(0, 10).boxed().map(i -> generateTask(i, executors)).collect(Collectors.toList());Observable<List<String>> merged = Observable.merge(obs).toList();List<String> result = merged.toBlocking().first();logger.info(result.toString());}private Observable<String> generateTask(int i, ExecutorService executorService) {return Observable.<String>create(s -> {Util.delay(2000);s.onNext( i + "-test");s.onCompleted();}).subscribeOn(Schedulers.from(executorService));
}
请注意,我纯粹是出于测试目的。 现在,使用Spring Reactor Core的类似代码可以转换为以下代码:
@Test
public void testScatterGather() {ExecutorService executors = Executors.newFixedThreadPool(5);List<Flux<String>> fluxList = IntStream.range(0, 10).boxed().map(i -> generateTask(executors, i)).collect(Collectors.toList());Mono<List<String>> merged = Flux.merge(fluxList).toList();List<String> list = merged.get();logger.info(list.toString());}public Flux<String> generateTask(ExecutorService executorService, int i) {return Flux.<String>create(s -> {Util.delay(2000);s.onNext(i + "-test");s.onComplete();}).subscribeOn(executorService);
}
它或多或少地一对一映射。 Mono类型的区别很小,我个人认为该类型是反应式库的不错的介绍,因为它可以很清楚地表明是否发出了多个项目,而只发出了一个。样品。 这些对我来说仍然是早期的探索,我希望对这个优秀的图书馆更加熟悉。
翻译自: https://www.javacodegeeks.com/2016/04/scatter-gather-using-spring-reactor-core.html
使用Spring Reactor Core进行分散收集相关推荐
- io.realm:rea_使Java具有响应性的框架和工具包:RxJava,Spring Reactor,Akka和Vert.x概述...
io.realm:rea 如今,人们需要具有高用户体验的高响应性,交互式应用程序,这通常意味着要处理异步性,尤其是当应用程序涉及高负载,实时数据和多用户时. 由于Java是一种固有的语言,它固有地支持 ...
- 使Java具有响应性的框架和工具包:RxJava,Spring Reactor,Akka和Vert.x概述
如今,人们需要具有高用户体验的高响应性,交互式应用程序,这通常意味着处理异步性,尤其是当这些应用程序涉及高负载,实时数据和多用户时. 由于Java是一种固有的支持命令式编程风格的面向对象语言,因此异步 ...
- Spring Reactor教程
在RESTful服务的世界中,实际上实际上是在幕后进行许多工作,我们通常必须在应用程序中进行很多处理,而实际上并不会影响需要发送给真实用户的响应. 可以被动地做出这些业务决策,以便它们对与应用程序交互 ...
- Kubernetes(K8s)容器设计模式实践案例 – 分散收集模式
<Kubernetes与云原生应用>专栏是InfoQ向轻元科技首席架构师王昕约稿的系列 文章.本专栏包含8篇内容,将会从介绍和分析Kubernetes系统以及云原生应用 入手,逐步推出基于 ...
- Java响应式的框架和工具包:RxJava、Spring Reactor 和 Vert.x 概述
今天,人们想要具有强大用户体验的高响应.交互式应用程序,这通常意味着处理异步性,尤其是当应用程序涉及高负载.实时数据和多用户时. 由于 Java 是一种面向对象的语言,本质上支持命令式编程风格,因此异 ...
- Spring中常见的注解收集
Spring中常见的注解收集 文章目录 Spring中常见的注解收集 1.@ResponseBody 2.@RequestBody 3.@RequestParam 4.@Controller 5.@R ...
- Spring Framework Core IOC
Core IoC Container 依赖注入的方式如下: 通过构造函数参数 通过工厂方法的参数 从构造或者工厂方法返回的对象实例上设置的属性 这个过程通过直接使用类的构造或者类似服务定位器模式的机制 ...
- Spring MVC的WebMvcConfigurerAdapter用法收集(零配置,无XML配置)
原理先不了解,只记录常用方法 用法: @EnableWebMvc 开启MVC配置,相当于 <?xml version="1.0" encoding="UTF-8&q ...
- spring --jia包依赖坐标收集
<!--mysql驱动包 --><dependency><groupId>mysql</groupId><artifactId>mysql- ...
最新文章
- Matlab R2010在centost下的安装
- C#中File的使用
- 聊聊数据库和缓存同步机制
- C#属性: 利用set实现递归
- 设计模式(一)预备知识
- CentOS7安装OpenFire
- try-catch-finally-return执行路径总结
- 调试24L01经验总结
- 获取WebView缩放控件,并对其进行改造
- 从开源爱好者到 Apache 董事,他花了 11 年
- 图文介绍进程和线程的区别
- CnPack20090801更新包
- 自定义错误页面 404.html
- Linux系统下安装flash player插件
- 如何去管理Java项目
- 学习Wolff关于分离镜面反射与漫反射的文章
- android的轮播图Banner之本地加载和网络加载图片
- 黑苹果系统_黑苹果系统的安装(实例一)
- grub引导项修复详解_grub2修复引导 · LINCHUAN的小站
- Spring Boot系列六 Spring boot集成mybatis、分页插件pagehelper