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

如今,人们需要具有高用户体验的高响应性,交互式应用程序,这通常意味着处理异步性,尤其是当这些应用程序涉及高负载,实时数据和多用户时。

由于Java是一种固有的支持命令式编程风格的面向对象语言,因此异步性是一个很麻烦的问题,它可能会使代码变成完全的地狱。 解决异步问题的一种可能方法是在编码级别( 反应性编程 )或设计和体系结构级别(反应性系统)引入“反应性”。

让我们遍历最流行的框架和工具包,以了解我们今天有哪些选择可以在Java中进行反应以及它们之间的差异(如果有的话)。 但是,从“反应”上下文中刷新一些基本术语开始是一个好主意。

1.快速梳理“反应性”

Reactive Streams规范于2015年出现,旨在为具有无阻塞背压的异步流处理提供标准,以确保反应库的互操作性。 该计划没有引入任何新内容,而是汇集了一组规则和协议,这些规则和协议简化并标准化了多种工具之间的“反应性”。 它引入了四个核心接口( 发布者订阅者订阅处理器 )。 发布者产生一系列事件并将其定向到订阅者订阅服务器发布 服务器接收数据并产生副作用。 订阅发布者订阅者之间的连接。 处理器包括发布者订阅者协议。

非阻塞环境意味着永远不会浪费线程以等待其他操作完成。

背压是一种“重要的反馈机制” ,可用于管理情况,即数据的生成速度快于接收方消耗数据的速度。 它使数据生产者有可能保持正确的步伐,并且在高负载下不会失败。

消息驱动和事件驱动的方法。 使用消息驱动的方法,生产者可以准确地知道他向谁发送消息,而事件驱动的方法意味着接收者只是订阅数据生产者,它保留了所有订户的列表,并在有任何订户的情况下通知他们状态改变。

2. Java反应式编程

有两种最常用于在Java应用程序中实现反应式编码的框架: RxJavaSpring Reactor

RxJava第一个完整的 Java 反应工具 。 在遥远的2009年,Erik Meijer通过Reactive Extensions引入了这种新的编程风格,将其作为一组Microsoft库实现,用于通过默认使用.NET 4.0的可观察序列来创建异步和事件驱动的程序。 很快,Rx.NET赢得了开发人员的热爱,并且全世界看到了其他实现:RxJava(2014年11月),RxSwift,RxScala,RxJS,Rx.Kotlin等。RxJava2.0从零开始重新编写了Reactive Streams规范,并添加了新的类型。数据生产者介绍。

2013年,世界上第一次看到Spring Reactor 。它与RxJava非常相似,并且代表Spring 5的API实现。尽管两者有很多共同点,但是这两个框架之间还是存在一些差异。 让我们使用下面的图表快速探索它们。

  RxJava的 弹簧反应堆

第四代图书馆

最新版本,至2018年 2017年6月21日-RxJava 2.1.1。 2017年11月16日– Reactor Core 3.1.2。
环境 反应性X Spring5
Java版本 Java 6(Java和适用于Android的Java) Java 8

默认情况下单线程非阻塞

事件驱动

支持反应流 部分支持反应式流* 完全支持反应式流
数据产生者的类型 RxJava 1 –可观察

RxJava 2 –可观察(多个值),可流动(多个值,支持背压),单个(一个值或错误),可能(一个值,错误或无排放),可完成(完成并带有错误或成功)

控制器:

通量表示0-n值和Mono的异步序列-0-1值的异步序列(均支持背压)

运营商数量 超过100名运营商** 一组核心运营商

* RxJava只有Flowables作为Publisher的真实体现。 其余数据生产者(即Single,Maybe,Observable,Completable)不支持背压。

** RxJava和Reactor都允许应用到操作员的沉浸式功能(地图,zip,过滤器等)来转换和修改主流。 大理石图极大地说明了操作员( 在此处查找一些娱乐内容)。 它们不属于最初的反应式编程理论,看起来像函数式编程的一部分。 操作员极大地简化了代码编写,因为它们代表了转换数据流的便捷方法,而在“常规” Java中,开发人员必须耐心地编写计算机将执行的每个步骤。 另一方面,操作员允许将具有特定功能的大量步骤融合在一起,这使代码更加清晰,精简和易于理解。 此外,操作员彼此兼容

3. Java反应系统

反应性系统代表了“反应性”的下一个层次。 AkkaVert.x是通常用于构建这些系统的框架,这些框架最常被实现为反应微服务 。 在IT世界中,这个新术语从字面上意味着微服务架构和反应系统原理的结合。 “反应性”的获得对于这些分布式系统来说是完美的,这使它们更加灵活,可靠,并提高了性能。

Lightbend于2009年7月推出Akka (最新版本:2018年1月11日-Akka 2.5.9)。 该工具包最初是用Scala编写的,但如今也可以在Java中使用。 Akka是开源的,并支持Reactive Streams规范。 该工具包的目的是将Erlang平台的高可用性和可伸缩性引入JVM。

演员模型是Akka的基础。 参与者是独立的代码集,它们通过消息相互通信。 演员的邮箱接收消息,并通过单个控制线程使消息入队。

此外,Akka在演员树层次结构中脱颖而出-演员组织的一种特殊形式,它暗示着不同级别的演员之间存在父子关系,从而确保了特定的容错能力和自我恢复能力。 父角色负责处理子块:当父角色收到有关子项崩溃的通知时,它可以继续,重新启动,停止其子进程或自行停止,以将错误处理的责任转移到下一级。 由于演员代表完全孤立的单位并且不共享任何可变状态,因此其中一个的突然停止不会影响其他演员,他们将能够照常继续工作。

Vert.x的第一个版本是2012年(最新版本:2018年2月13日– Vert.x 3.5.1)。 Vert.x是一个开源工具包,其背后的力量是Node.js。 Vert.x支持Reactive Streams,并提供垂直而非角色。 与Akka不同,Vert.x是一个完全由事件驱动的环境,并以简单的请求-响应方式进行通信。 消息被发送到EventBus,以便通过单个控制线程排队。 Vert.x是一个多语言版本,可轻松与任何JVM或非JVM语言配合使用。

Akka(在ActorRef的帮助下)和Vert.x(在Service Proxies的帮助下)都简化了对分布式系统的远程调用。 由于它们的组件通过类似于URL的ActorRef / Service Proxies进行通信,因此没有理由关心它是否是本地电话。

外卖:

  • Akka是一组具有良好知识库的成熟库,这意味着执行它的时间和精力更少。
  • x比Akka还要年轻,因此它不那么受欢迎,而且描述也不那么好。
  • Vert,x是一个多语言版本,因此在开发过程中结合不同语言时更加方便。
  • Akka参与者形成一个树形层次结构,可以对高负载和故障进行优雅的管理。
  • Akka是消息驱动的,这使其组件(演员)之间的耦合更加松散。

4.最后一点

在本文中,我们快速回顾了Java世界中使用的“反应式”框架和工具包。 他们不断获得关注,并证明“反应性”不仅是一个过度夸大的概念,而且还是在编码和体系结构级别上进行Java应用程序开发的一种可行方法。

Java开发人员可以在反应性上下文中选择彼此非常相似的各种角色,尽管它们也保留一些独特的功能。 好消息是它们都支持Reactive Streams标准,从而使它们可以互操作。 因此,开发人员可以选择适合自己特定需求的内容,也可以针对自己的应用尽力而为。

翻译自: https://www.javacodegeeks.com/2018/08/frameworks-toolkits-make-java-reactive-rxjava-spring-reactor-akka-vert-x-overview.html

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

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

相关文章

【渝粤题库】广东开放大学 商务办公软件应用与实践 形成性考核

选择题 题目:要复制字符格式而不复制字符,需用()按钮。 题目:3、在Excel 2010的"开始”选项卡的"剪贴板”组中,不包含的按钮是()。 题目:4、启动Excel 2010后,…

【渝粤题库】广东开放大学 市场营销 形成性考核

选择题 题目: 以"顾客需要什么,我们就生产供应什么”作为其座右铭的企业是()企业。 题目: 市场营销学作为一门独立的经营管理学科诞生于20世纪初的()。 题目: 市场营销学&quo…

MCMC 和 Gibbs采样

0. MCMC 从名字我们可以看出,MCMC由两个MC组成,即蒙特卡罗方法(Monte Carlo Simulation,简称MC)和马尔科夫链(Markov Chain ,也简称MC)。 Monte Carlo (蒙特卡罗&#x…

【渝粤题库】广东开放大学 招投标与合同管理 形成性考核 (2)

选择题 题目:某工程项目在估算时算得成本是1000万元人民币,概算时算得成本是950万元人民币,预算时算得成本是900万元人民币,投标时某承包商根据自己企业定额算得成本是800万元人民币。根据《招标投标法》规定“投标人不得以低于成…

matlab 按一定概率取数组中的值

有一个数组[1,2,3,4] ,有一个变量A要从这个数组中取值。A取1,2,3,4的概率分别为0.7,0.15,0.1,0.05。我如何按照这样的概率,随机生成100个A 思路是:你先产生100个随机数,…

【渝粤题库】广东开放大学 标准化专题讲座 形成性考核

​👉关注我,看答案👈 选择题 题目:制定产品标准的关键是______。 题目:企业标准化战略三步曲中非常关键,关系到企业经营的成败的战略是____。 题目:企业标准采取什么形式、规定什么内容,以及标准制定的时机…

【渝粤题库】广东开放大学 电子商务安全与支付 形成性考核

选择题 题目: 具体来讲,生产企业的物流活动包括 选择一项或多项: 题目:支付系统参与者中,( )的要求是:金额大,时间紧 题目:36 、发起人是支付系统中支付业务…

使用Java流和In-JVM-Memory的超低延迟查询

自然界的基本规则(例如光速和通用信息论)对我们可以从传统系统体系结构中获得的最大性能设置了明显的限制。 了解您作为Java开发人员如何使用JVM技术和Java流将性能提高几个数量级。 例如,如果应用程序服务器和数据库服务器相距100 m&#…

matlab写出二维数组

%用matlab将二维数组写入txt文件 %比方说 矩阵A 为 A[1 2 3;4 5 6]; %那么程序 为 fidfopen(‘A1.txt’,‘w’); [b1 b2]size(A); for i1:b1 for j1:b2 fprintf(fid,’%10d’,A(i,j)); end fprintf(fid,’\n’); end fclose(fid); https://blog.csdn.net/susu_love/article…

【渝粤题库】广东开放大学 英语语法与基础写作 形成性考核 (2)

选择题 题目:If _______ want to stay in good shape, you should do more exercise. 题目:At last he got home, ________ and . 题目: must work hard so that they can achieve success. 题目:The weather in Guangzhou is dif…

【渝粤题库】广东开放大学 跨文化商务沟通 形成性考核

选择题 题目: 3. The Chinese word “蝙蝠” carries the same connotative meanings with the English word “bat”. 选择一项: 题目: 4. The Chinese word “龙” carries the same denotative meaning with the English word “dragon”…

累积:轻松自定义Java收集器

Accumulative是针对Collector<T, A, R>的中间累积类型A提出的接口Collector<T, A, R>以使定义自定义Java Collector更加容易。 介绍 如果您曾经使用过Java Stream &#xff0c;那么很可能使用了一些Collector &#xff0c;例如&#xff1a; Collectors.toList C…

信道接入技术及协议

1. 信道共享方式 在普通的通信系统中&#xff0c;信道共享方式有3种&#xff1a;点对点、点对多点和多点共享。 1.1 点对点 点对点是最简单的信道共享方式。其特点是只有两个节点共享无线信道。在单信道时&#xff0c;两个节点可以通过半双工方式实现共享&#xff0c;在双信…

【渝粤题库】陕西师范大学151101 经济法概论作业 (笔试题型)

《经济法概论》作业 一、单项选择题 1、不可成为经济法律关系客体的是&#xff08; &#xff09; A. 有价证券 B. 无形资产 C. 建筑工程 D.国家保护文物等禁止流通物 2、仲裁实行&#xff08; &#xff09; A.一裁终局制 B.两裁终局制 C.三裁终局制 D.裁终局制 3、下列关于个人…

jdk8 cms g1gc_G1 vs CMS vs平行GC

jdk8 cms g1gc这篇文章是我们一年前进行的实验的跟进&#xff0c;比较了现实环境中不同GC算法的性能。 我们进行了相同的实验&#xff0c;将测试扩展为包含G1垃圾收集器&#xff0c;然后在不同的平台上运行了测试。 今年&#xff0c;我们的测试使用了以下垃圾收集器&#xff1a…

【渝粤题库】陕西师范大学152103 公共行政学

《公共行政学&#xff08;专科&#xff09;》作业 一、单选题 1&#xff0e;“政治与行政二分”最早的提出者是&#xff08; &#xff09;。 A.凯恩斯 B.布坎南 C.韦伯 D.威尔逊 2&#xff0e;新公共管理运动肇始于&#xff08; &#xff09;。 A.英国 B.美国 C.德国 D.新西兰 …

Matlab查看数组大小的命令——size、length、numel和ndims

1 size 功能&#xff1a;主要用来获得矩阵的各个维数的大小&#xff0c;或者指定维数的大小。 语法&#xff1a; d size(X) [m,n] size(X) m size(X,dim) [d1,d2,d3,…,dn] size(X) 其语法应用比较灵活。 2 length 功能&#xff1a;用来获得数组长度&#xff0c;即…

Java的精妙之处,包括基元和变量参数数组

在我最近的博客文章Arrays.hashCode&#xff08;&#xff09;与 DZone联合版本的评论中提出了一个有趣的问题。 Objects.hash&#xff08;&#xff09; “。 该评论的作者建立了一些示例&#xff0c;这些示例与我的博客文章中使用的示例相似&#xff0c;并且显示出与我看到的结…

【渝粤题库】陕西师范大学163201 旅游科学引论作业(专升本)

《旅游科学引论》作业 一、简答题 1、旅游是什么&#xff1f; 2、旅游学的研究对象是什么&#xff1f; 3、旅游能干什么&#xff1f; 4、什么是旅游学&#xff1f; 5、旅游的本质是什么&#xff1f; 6、旅游学的学科性质是什么&#xff1f; 7、旅游学的学科如何构成&#xff1f…

【渝粤题库】陕西师范大学180103市场营销学Ⅰ作业(高起专)

《市场营销学I》作业 一、单项选择题 1、人的需求是无限的&#xff0c;但是有限的&#xff08; &#xff09;限制了人们的大部分欲求。 A&#xff0e;场所 B&#xff0e;商品交换关系 C&#xff0e;人口 D&#xff0e;购买力 2、市场营销的核心是&#xff08; &#xff09;。 …