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

由于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

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

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

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

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

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

  3. java同步变异步框架_java-如何使用Spring配置异步和同步事件发布者

    我正在尝试使用spring事件实现事件框架,后来我知道spring事件框架的默认行为是sync.但是在春季上下文初始化期间,如果它找到ID为applicationEventMulticaster的be ...

  4. Java的并发集合框架

    文章目录 一.并发集合框架 1. 简介 2. 接口Iterable 2. 接口Collection 3. 接口List 4. 接口Set 5. 接口Queue 6. Deque 二.非阻塞队列 1. ...

  5. Java常用的四大框架有什么

    我们知道,传统的Java Web应用程序是采用JSP+SERVLET+JAVABEAN来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责前台展示的JSP.负责流程逻辑控制的SER ...

  6. java开源持久层框架集

    原文链接:http://www.open-open.com/3_18.htm Hibernate Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Ja ...

  7. Java对象XML序列化框架-Simple2.0

    Java对象XML序列化框架-Simple2.0 Simple是一个XML序列化框架,一个Java 版本宽容的序列化框架,能够快速在Java 平台上开发XML.支持通过annotations完全配置化 ...

  8. Java开源——常见J2EE框架简介

    Java开源--常见J2EE框架简介 Spring Framework Spring是一个解决了许多在J2EE开发中常见的问题的强大框架. Spring提供了管理业务对象的一致方法并且鼓励了注入对接口 ...

  9. 简单介绍一下Java常用的五大框架!

    Java框架在Java开发中的作用是毋庸置疑的.那么Java常用框架有哪些?大概包括:Hibernate.Spring.Struts.jQuery.Redis五种.这些框架有什么用呢?Java常用框架 ...

最新文章

  1. 台积电要造第一款7nm芯片 明年下半年可投产
  2. Windows家庭版远程服务
  3. ios10前台收到推送_IOS - 前台时的推送弹窗效果
  4. mac无法充电解决办法!快来get下吧!
  5. php 支付宝支付回调与查询订单
  6. ASP.NET 创建网站地图
  7. Java Web开发实战经典(基础篇)
  8. 彻底关闭win10自动更新
  9. 190种超全的解密工具任你选!!
  10. 一个读者大佬精心总结的阿里、腾讯、宇宙条大厂 Offer 面经和硬核面试攻略
  11. 基于51单片机的无线病床呼叫系统装置 proteus仿真原理图程序设计
  12. svn的客户端从安装到运行
  13. 设计模式(21)备忘录模式
  14. 安装笔记本内存条及认识内存插槽
  15. 你问我答:听说你做订阅号挣了 100W ?
  16. php 查看文件信息,文件信息查看
  17. 图片工具GraphicsMagick的下载安装配置使用
  18. 如何实现系统的单点登录?
  19. Vue零基础到实战权威开发宝典_学习笔记
  20. 平面图的基本概念及性质

热门文章

  1. 【传递闭包】【倍增】幸福路径(P4308)
  2. 【搜索树】高级打字机(luogu 1383)
  3. JavaFX UI控件教程(六)之Toggle Button
  4. MySQL coalesce()函数
  5. java反射的field.get(null)
  6. 阿里巴巴对Java编程【单元测试】的规约
  7. JSON Web Token (JWT)生成Token及解密实战
  8. 2022的第一天,立个目标
  9. 指纹识别软件安装包下载
  10. 使用Servlet上传多张图片——实体层(ProductInfo.java)