io.realm:rea_使Java具有响应性的框架和工具包:RxJava,Spring Reactor,Akka和Vert.x概述...
io.realm:rea
如今,人们需要具有高用户体验的高响应性,交互式应用程序,这通常意味着要处理异步性,尤其是当应用程序涉及高负载,实时数据和多用户时。
由于Java是一种固有的语言,它固有地支持命令式编程风格,因此异步性是一个很麻烦的问题,它会使代码变成完全的地狱。 解决异步问题的一种可能方法是在编码级别( React性编程 )或设计和体系结构级别(React性系统)引入“React性”。
让我们遍历最受欢迎的框架和工具包,以了解我们今天有哪些选择可以在Java中进行响应以及它们之间的差异(如果有的话)。 但是,从“React”上下文中刷新一些基本术语开始是一个好主意。
1.快速梳理“React性”
Reactive Streams规范于2015年出现,旨在为具有无阻塞背压的异步流处理提供标准,以确保React库的互操作性。 该计划未引入任何新内容,而是汇集了一组规则和协议,以简化和标准化跨多个工具的“React性”。 它介绍了四个核心接口( 发布者 , 订阅者 , 订阅和处理器 )。 发布者产生一系列事件并将其定向到订阅者 。 订阅服务器从发布 服务器接收数据并产生副作用。 订阅是发布者与订阅者之间的连接。 处理器包括发布者和订阅者协议。
非阻塞环境意味着永远不会浪费线程以等待其他操作完成。
背压是一种“重要的反馈机制” ,它可以管理情况,即数据的生成速度快于接收方消耗数据的速度。 它使数据生产者有可能保持正确的步伐,并且在高负载下不会失败。
消息驱动和事件驱动的方法。 使用消息驱动的方法,生产者可以确切地知道向谁发送消息,而事件驱动的方法意味着接收者只订阅数据生产者,它保留了所有订户的列表,并在有任何订户的情况下通知他们状态改变。
2. JavaReact式编程
有两种最常用于在Java应用程序中实现React式编码的框架: RxJava和Spring Reactor 。
RxJava是第一个完整的 Java React工具 。 在遥远的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的 | 弹簧React堆 | |
第四代图书馆 |
||
最新版本,至2018年 | 2017年6月21日-RxJava 2.1.1。 | 2017年11月16日– Reactor Core 3.1.2。 |
环境 | React性X | 春天5 |
Java版本 | Java 6(Java和Android版Java) | Java 8 |
默认情况下单线程非阻塞 | ||
事件驱动 |
||
支持React流 | 部分支持React式流* | 完全支持React流 |
数据产生者的类型 |
RxJava 1 –可观察
RxJava 2 –可观察(多个值),可流动(多个值,支持背压),单个(一个值或错误),可能(一个值,错误或无排放),可完成(完成并带有错误或成功) |
控制器:
磁通量表示0-n值和Mono的异步序列-0-1值的异步序列(均支持背压) |
运营商数量 | 超过100名运营商** | 一组核心运营商 |
* RxJava只有Flowables作为Publisher的真实体现。 其余数据生产者(即Single,Maybe,Observable,Completable)不支持背压。
** RxJava和Reactor都允许应用操作员的沉浸式功能(地图,zip,过滤器等)来转换和修改主流。 大理石图极大地说明了操作员( 在此处查找一些娱乐内容)。 它们不属于最初的React式编程理论,看起来像函数式编程的一部分。 操作员极大地简化了代码编写,因为它们代表了转换数据流的便捷方法,而在“常规” Java中,开发人员必须耐心地编写计算机将执行的每个步骤。 另一方面,操作员允许将具有特定功能的大量步骤融合在一起,这使代码更加清晰,精简和易于理解。 此外,操作员彼此兼容 。
3. JavaReact系统
React性系统代表了“React性”的下一个层次。 Akka和Vert.x是通常用于构建这些系统的框架,这些框架最常实现为React式微服务 。 在IT世界中,这个新术语从字面上意味着微服务架构和React性系统原理的结合。 “React性”的获得对于这些分布式系统来说是完美的,这使它们更加灵活,可靠,并提高了性能。
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世界中使用的“React式”框架和工具包。 他们不断获得关注,并证明“React性”不仅是一个过度炒作的概念,而且还是在编码和体系结构级别上进行Java应用程序开发的一种可行方法。
Java开发人员可以在React性上下文中选择彼此非常相似的各种角色,尽管它们也保留了一些独特的功能。 好消息是它们都支持Reactive Streams标准,从而使它们可以互操作。 因此,开发人员可以选择适合自己特定需求的内容,也可以针对自己的应用尽力而为。
翻译自: https://www.javacodegeeks.com/2018/08/frameworks-toolkits-make-java-reactive-rxjava-spring-reactor-akka-vert-x-overview.html
io.realm:rea
io.realm:rea_使Java具有响应性的框架和工具包:RxJava,Spring Reactor,Akka和Vert.x概述...相关推荐
- 使Java具有响应性的框架和工具包:RxJava,Spring Reactor,Akka和Vert.x概述
如今,人们需要具有高用户体验的高响应性,交互式应用程序,这通常意味着处理异步性,尤其是当这些应用程序涉及高负载,实时数据和多用户时. 由于Java是一种固有的支持命令式编程风格的面向对象语言,因此异步 ...
- Java响应式的框架和工具包:RxJava、Spring Reactor 和 Vert.x 概述
今天,人们想要具有强大用户体验的高响应.交互式应用程序,这通常意味着处理异步性,尤其是当应用程序涉及高负载.实时数据和多用户时. 由于 Java 是一种面向对象的语言,本质上支持命令式编程风格,因此异 ...
- java同步变异步框架_java-如何使用Spring配置异步和同步事件发布者
我正在尝试使用spring事件实现事件框架,后来我知道spring事件框架的默认行为是sync.但是在春季上下文初始化期间,如果它找到ID为applicationEventMulticaster的be ...
- 【计算机IO系类】Java NIO
前面我们讲了操作系统的IO模型.而Java NIO并不是只包括IO模型,还包括了对模型的实现和优化.Java NIO是Java 1.4版加入的新特性,虽然Java技术日新月异,但历经10年,NIO依然 ...
- JRuby:使Java和Ruby成为一家人
一. 引言 Ruby是现在编程界讨论得正热火朝天的一种语言.这种语言功能强大而且易于使用:同时Ruby还紧密 绑定到例如Ruby on Rails等web应用程序开发框架中.另一方面,在过去的十年间, ...
- 架构设计:系统间通信(5)——IO通信模型和JAVA实践 下篇
接上篇:<架构设计:系统间通信(4)--IO通信模型和JAVA实践 中篇>,我们继续讲解 异步IO 7.异步IO 上面两篇文章中,我们分别讲解了阻塞式同步IO.非阻塞式同步IO.多路复用I ...
- java更好的语言_五个使Java变得更好的功能
java更好的语言 我偶然发现了Brian Goetz 提出的有关Java数据类的建议 ,立即意识到我也对如何使Java更好地成为一种语言有一些想法. 我实际上有很多,但这只是五个最重要的简短列表. ...
- 五个使Java变得更好的功能
我偶然发现了Brian Goetz 提出的有关Java数据类的建议 ,立即意识到我也对如何使Java更好地成为一种语言有一些想法. 我实际上有很多,但这只是五个最重要的列表. 专制(2006),迈克· ...
- JAVA代码怎样变成软件_怎么使JAVA程序变成可执行程序
怎么使JAVA程序变成可执行程序 mip版 关注:276 答案:3 悬赏:80 解决时间 2021-01-25 10:37 已解决 2021-01-24 19:43 怎么使JAVA程序变成可执行 ...
最新文章
- 信号与系统作业问题回复
- CSS选择器(转载)
- boost::geometry::strategy::distance::detail::projected_point_ax用法的测试程序
- 揭秘微信「看一看」如何精准挖掘你感兴趣的内容
- 如何在 SAP Spartacus 自定义 UI 里使用标准 UI 的上下文数据 - let 关键字的用法
- bios文件查看工具_“主板BIOS教程”手把手教你刷bios,多种bios教程
- 华为云全球首发企业级AI应用开发套件ModelArts Pro,加速行业AI落地
- grafana官方使用文档_5. Centos7 下部署使用 nmon2influxdb
- MOS管正确选择的步骤
- Rust 的安装和使用举例
- Python Day56-57 js
- python小波分解相关
- resin 系统日志_resin学习随笔
- vi删除选中内容_vi 删除指令的使用
- 用react-custom-scrollbars插件美化 滚动条
- 图像超分辨去噪(去雨雾)
- python--len函数的用法
- Mac如何安装第三方新字体?Mac字体安装图文教程
- 制作二十四进制的时钟特效(JavaScript)
- python读取xlsx文件pandas_pandas dataframe 读取 xlsx 文件