rxjava 被观察者_RxJava:从未来到可观察

rxjava 被观察者

大约4年前,我第一次在Matthew Podwysocki的博客上遇到了Reactive Extensions ,但是直到我几周前看到Matthew在Code Mesh上发表演讲后,我才对它有所了解。

最近它似乎越来越流行,我注意到Netflix编写了一个Java版本RxJava 。

我以为可以尝试通过更改在探索cypher的MERGE函数时暴露的Observable而不是Future的代码来尝试一下。

回顾一下,我们有50个线程,我们进行了100次迭代,在这些迭代中我们创建了随机(用户,事件)对。 我们最多创建10个用户和50个事件,目标是同时发送相同对的请求。

在另一篇文章的示例中,我丢弃了每个查询的结果,而在这里我返回了结果,因此我有一些要订阅的内容。

代码的轮廓如下所示:

public class MergeTimeRx
{public static void main( final String[] args ) throws InterruptedException, IOException{String pathToDb = "/tmp/foo";FileUtils.deleteRecursively( new File( pathToDb ) );GraphDatabaseService db = new GraphDatabaseFactory().newEmbeddedDatabase( pathToDb );final ExecutionEngine engine = new ExecutionEngine( db );int numberOfThreads = 50;int numberOfUsers = 10;int numberOfEvents = 50;int iterations = 100;Observable<ExecutionResult> events = processEvents( engine, numberOfUsers, numberOfEvents, numberOfThreads, iterations );events.subscribe( new Action1<ExecutionResult>(){@Overridepublic void call( ExecutionResult result ){for ( Map<String, Object> row : result ){}}} );....}}

使用RxJava的好处是,没有提到我们如何获取ExecutionResult的集合,这并不重要。 我们只有它们的流,并且通过在Observable上调用订阅函数,只要有另一个函数可用,我们就会得到通知。

我发现的大多数示例都显示了如何从单个线程生成事件,但是我想使用线程池,以便可以同时触发许多请求。 processEvents方法最终看起来像这样:

private static Observable<ExecutionResult> processEvents( final ExecutionEngine engine, final int numberOfUsers, final int numberOfEvents, final int numberOfThreads, final int iterations ){final Random random = new Random();final List<Integer> userIds = generateIds( numberOfUsers );final List<Integer> eventIds = generateIds( numberOfEvents );return Observable.create( new Observable.OnSubscribeFunc<ExecutionResult>(){@Overridepublic Subscription onSubscribe( final Observer<? super ExecutionResult> observer ){final ExecutorService executor = Executors.newFixedThreadPool( numberOfThreads );List<Future<ExecutionResult>> jobs = new ArrayList<>();for ( int i = 0; i < iterations; i++ ){Future<ExecutionResult> job = executor.submit( new Callable<ExecutionResult>(){@Overridepublic ExecutionResult call(){Integer userId = userIds.get( random.nextInt( numberOfUsers ) );Integer eventId = eventIds.get( random.nextInt( numberOfEvents ) );return engine.execute("MERGE (u:User {id: {userId}})\n" +"MERGE (e:Event {id: {eventId}})\n" +"MERGE (u)-[:HAS_EVENT]->(e)\n" +"RETURN u, e",MapUtil.map( "userId", userId, "eventId", eventId ) );}} );jobs.add( job );}for ( Future<ExecutionResult> future : jobs ){try{observer.onNext( future.get() );}catch ( InterruptedException | ExecutionException ignored ){}}observer.onCompleted();executor.shutdown();return Subscriptions.empty();}} );}

我不确定这是否是使用Observable的正确方法,因此如果我记错了,请在评论中让我知道。

我不确定处理错误的正确方法是什么。 我最初在catch块中调用了observer#onError ,但这意味着不会再产生不是我想要的事件。

如果您想使用它,该代码可以作为要点 。 我添加了以下依赖关系以获取RxJava库:

<dependency><groupId>com.netflix.rxjava</groupId><artifactId>rxjava-core</artifactId><version>0.15.1</version></dependency>

参考: RxJava 从未来到我们的JCG合作伙伴 Mark Needham在Mark Needham Blog博客上均可观察到。

翻译自: https://www.javacodegeeks.com/2014/01/rxjava-from-future-to-observable.html

rxjava 被观察者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤题库】国家开放大学2021春3962金融营销基础题目

试卷代号&#xff1a;3962 2021年春季学期期末统一考试 金融营销基础 试题&#xff08;开卷&#xff09; 2021年7月 一、单项选择题&#xff08;在以下各题的备选答案中只有一个是正确的&#xff0c;请将正确答案的字母标号填在括号内&#xff0c;多选、不选、错选均不得分。每…

母函数(Generating function)、矩母函数(Moment Generating Function)

1. 简介 在数学中&#xff0c;某个序列的母函数(Generating function&#xff0c;又称生成函数)是一种形式幂级数&#xff0c;其每一项的系数可以提供关于这个序列的信息。使用母函数解决问题的方法称为母函数方法。 母函数可分为很多种&#xff0c;包括普通母函数、指数母函…

Lambda表达式Java教程

在本文中&#xff0c;我们提供了全面的Lambda Expressions Java教程。 1. Lambda Expressions Java教程–简介 Lambda表达式被认为是Java 8中引入的最好的功能之一。Lambda表达式被认为是Java进入函数式编程世界的第一步 。 可以将其视为无需类即可创建的函数。 它也可以像参数…

国家开放大学2021春1118机电一体化系统设计基础题目

教育 教育 试卷代号&#xff1a; 1118 2021年春季学期期末统一考试 机电一体化系统设计基础 试题 2021年7月 一、单选题&#xff08;每小题3分.共24分&#xff09; 1.以下不属于机电一体化系统主要功能的是( )。 A.控制功能 B.检测功能 C.计算功能 D.动力功能 2.为了提高机电…

随机过程

第一部分&#xff1a;为什么要研究随机过程&#xff1f; 人类认识世界的历史&#xff0c;就是一认识和描绘各种运动的历史&#xff0c;从宏观的天体运动到分子的运动&#xff0c;到人心理的运动-我们通称为变化&#xff0c;就是一个东西随时间的改变。 人们最成功的描绘运动的…

为特使建立控制平面的指南-识别组件

确定控制平面所需的组件 由于操作环境的范围千差万别&#xff0c;因此为Envoy实施控制平面所需的组件也可能如此。 例如&#xff0c;在一种极端情况下&#xff0c;如果您在构建时静态生成了Envoy文件并将其发送到Envoy&#xff0c;则需要以下组件&#xff1a; 模板引擎 数据存…

【渝粤题库】国家开放大学2021春2019统计学原理题目

试卷代号&#xff1a;2019 2021年春季学期期末统一考试 统计学原理试题&#xff08;开卷&#xff09; 2021年7月 一、单项选择题&#xff08;下列各题的备选答案中&#xff0c;只有一个选项是正确的&#xff0c;请把正确答案的序号填写在括号内。每小题2分&#xff0c;共40分&a…

43、实战 - 手写一个 batch norm 算法

这是我们手写的 CNN 网络中第三个经典算法。 在 resnet50 这个神经网络中,总共有 conv , bn, relu, pooling, fc(全连接), softmax 这几个经典算法。 而conv,pooling 在之前的章节已经手写过了,relu 属于一行代码就可以写完的算法,很简单可以暂时忽略,fc(全连接)可以直…

【渝粤题库】国家开放大学2021春2047商业银行经营管理题目

试卷代号&#xff1a;2047 2021年春季学期期末统一考试 商业银行经营管理 试题&#xff08;开卷&#xff09; 2021年7月 一、单项选择题&#xff08;每题2分&#xff0c;共10分&#xff09; 1.( )是指在进行贷款定价时&#xff0c;银行首先必须确保贷款收益足以弥补资金成本和各…

网络流量模型

传统的网络流量模型假设数据包到达的过程为泊松过程&#xff0c;数据包长度为指数分布&#xff0c;并将这种模型成功应用于ARPANET&#xff0c;但是随着网络规模扩大、Qos保证技术以及新的应用的出现&#xff0c;网络流量特征得到极大改变&#xff0c;经典的泊松模型已经不能再…

java steam_Java,Steam控制器和我

java steam您是否想过是否可以将现有的东西用于新的东西&#xff1f; 我看了一些所谓的“蒸汽控制器”&#xff08;从现在开始为SC&#xff09;的镜头&#xff0c;并看着我的游戏手柄。 问我自己是否有可能以类似蒸汽的方式使用它&#xff0c;我找到了一些Java库并创建了一个项…

【渝粤题库】国家开放大学2021春2096经济法学题目

试卷代号&#xff1a;2096 2021年春季学期期末统一考试 经济法学 试题 2021年7月 一、单项选择题&#xff08;每小题1分&#xff0c;共10分。在每小题的四个备选答案中&#xff0c;选出一个正确的答案&#xff0c;请将正确答案的序号填在括号内&#xff09; 1.能够体现经济法的…

【渝粤题库】国家开放大学2021春2108刑法学(2)题目

试卷代号&#xff1a;2108 2021年春季学期期末统一考试 刑法学(2) 试题 2021年7月 一、选择题&#xff08;每小题的备选答案中至少有一个是正确的&#xff0c;请将正确答案的序号字母填入题目括号内。多选、少选均不得分。每小题3分&#xff0c;共21分&#xff09; 1.信用卡诈骗…

如何在STS中创建Spring Boot项目

你好朋友&#xff0c; 在本教程中&#xff0c;我们将逐步介绍如何在STS&#xff08;Spring工具套件&#xff09;中创建Spring Boot项目。 步骤1&#xff1a; 如果您尚未从相应的操作系统的以下链接中下载Spring工具套件&#xff0c;请下载&#xff1a; https://spring.io/to…

【渝粤题库】国家开放大学2021春2175市场营销学题目

试卷代号&#xff1a;2175 2021年春季学期期末统一考试 市场营销学 试题 2021年7月 注意事项 一、将你的学号、姓名及分校&#xff08;工作站&#xff09;名称填写在答题纸的规定栏内。考试结束后&#xff0c;把试卷和答题纸放在桌上。试卷和答题纸均不得带出考场。监考人收完考…

置信区间(confidence interval)

要理解置信区间&#xff0c;就要从统计学最基本最核心的思想去思考&#xff0c;那就是用样本估计总体。 置信水平(Confidence level)是指总体参数值落在样本统计值某一区内的概率&#xff1b; 而置信区间&#xff08;confidence interval&#xff09;是指在某一置信水平下&…

【渝粤题库】国家开放大学2021春2223物业管理财税基础题目

试卷代号&#xff1a;2223 2021年春季学期期末统一考试 物业管理财税基础 试题&#xff08;开卷&#xff09; 2021年7月 一、单项选择题&#xff08;每题2分&#xff0c;共20分) 1.以下属于零基预算优点的是( )。 A.简单、相对稳定. B.扩大了预算的适用范围&#xff0c;便于预算…

【渝粤题库】国家开放大学2021春2246社会工作概论题目

试卷代号&#xff1a;2246 2021年春季学期期末统一考试 社会工作概论 试题 2021年7月 一、单选题&#xff08;下列选项中只有一个是正确的&#xff0c;将正确的答案序号填写在括号内。共10题&#xff0c;每题2分&#xff0c;共计20分&#xff09; 1.下列选项中属于社会工作直接…

卫星运动轨道

地球的自转轴与地球公转平面并不垂直&#xff0c;因此&#xff0c;黄道面和地球赤道面并不重合&#xff0c;而是有大约23.4的夹角&#xff0c;通常被称为黄赤交角&#xff0c;也称为转轴倾角、倾角&#xff08;obliquity&#xff09;或轴交角&#xff08;axial inclination&…

【渝粤题库】国家开放大学2021春2322物流信息技术题目

试卷代号&#xff1a;2322 2021年春季学期期末统一考试 物流信息技术 试题 2021年7月 一、单项选择题&#xff08;每小题1分&#xff0c;共10分&#xff0c;将正确答案选项的字母填入括号内&#xff09; 1.全球卫星定位系统也称为( )技术。 A.EDI B.CAD C.GIS D.GPS 2.条码识读…