我在使用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进行分散收集相关推荐

  1. io.realm:rea_使Java具有响应性的框架和工具包:RxJava,Spring Reactor,Akka和Vert.x概述...

    io.realm:rea 如今,人们需要具有高用户体验的高响应性,交互式应用程序,这通常意味着要处理异步性,尤其是当应用程序涉及高负载,实时数据和多用户时. 由于Java是一种固有的语言,它固有地支持 ...

  2. 使Java具有响应性的框架和工具包:RxJava,Spring Reactor,Akka和Vert.x概述

    如今,人们需要具有高用户体验的高响应性,交互式应用程序,这通常意味着处理异步性,尤其是当这些应用程序涉及高负载,实时数据和多用户时. 由于Java是一种固有的支持命令式编程风格的面向对象语言,因此异步 ...

  3. Spring Reactor教程

    在RESTful服务的世界中,实际上实际上是在幕后进行许多工作,我们通常必须在应用程序中进行很多处理,而实际上并不会影响需要发送给真实用户的响应. 可以被动地做出这些业务决策,以便它们对与应用程序交互 ...

  4. Kubernetes(K8s)容器设计模式实践案例 – 分散收集模式

    <Kubernetes与云原生应用>专栏是InfoQ向轻元科技首席架构师王昕约稿的系列 文章.本专栏包含8篇内容,将会从介绍和分析Kubernetes系统以及云原生应用 入手,逐步推出基于 ...

  5. Java响应式的框架和工具包:RxJava、Spring Reactor 和 Vert.x 概述

    今天,人们想要具有强大用户体验的高响应.交互式应用程序,这通常意味着处理异步性,尤其是当应用程序涉及高负载.实时数据和多用户时. 由于 Java 是一种面向对象的语言,本质上支持命令式编程风格,因此异 ...

  6. Spring中常见的注解收集

    Spring中常见的注解收集 文章目录 Spring中常见的注解收集 1.@ResponseBody 2.@RequestBody 3.@RequestParam 4.@Controller 5.@R ...

  7. Spring Framework Core IOC

    Core IoC Container 依赖注入的方式如下: 通过构造函数参数 通过工厂方法的参数 从构造或者工厂方法返回的对象实例上设置的属性 这个过程通过直接使用类的构造或者类似服务定位器模式的机制 ...

  8. Spring MVC的WebMvcConfigurerAdapter用法收集(零配置,无XML配置)

    原理先不了解,只记录常用方法 用法: @EnableWebMvc 开启MVC配置,相当于 <?xml version="1.0" encoding="UTF-8&q ...

  9. spring --jia包依赖坐标收集

    <!--mysql驱动包 --><dependency><groupId>mysql</groupId><artifactId>mysql- ...

最新文章

  1. Matlab R2010在centost下的安装
  2. C#中File的使用
  3. 聊聊数据库和缓存同步机制
  4. C#属性: 利用set实现递归
  5. 设计模式(一)预备知识
  6. CentOS7安装OpenFire
  7. try-catch-finally-return执行路径总结
  8. 调试24L01经验总结
  9. 获取WebView缩放控件,并对其进行改造
  10. 从开源爱好者到 Apache 董事,他花了 11 年
  11. 图文介绍进程和线程的区别
  12. CnPack20090801更新包
  13. 自定义错误页面 404.html
  14. Linux系统下安装flash player插件
  15. 如何去管理Java项目
  16. 学习Wolff关于分离镜面反射与漫反射的文章
  17. android的轮播图Banner之本地加载和网络加载图片
  18. 黑苹果系统_黑苹果系统的安装(实例一)
  19. grub引导项修复详解_grub2修复引导 · LINCHUAN的小站
  20. Spring Boot系列六 Spring boot集成mybatis、分页插件pagehelper

热门文章

  1. java图片格式转化(例如jpg格式转化png)
  2. 优秀 Java 程序员写代码的风格
  3. 漫画:什么是A*寻路算法
  4. Vue及React脚手架安装
  5. 如何改变Idea的背景
  6. JS中DOM节点的CRUD
  7. 马踏棋盘算法(骑士周游)
  8. 2018蓝桥杯省赛---java---B---6(递增三元组)
  9. 如何设计java线程安全类_如何设计线程安全的Java程序
  10. java泛型程序设计——注意擦除后的冲突