原文:https://dzone.com/articles/the-reactive-universe-for-java-devsjava
想了解更多关于反应式编程的知识吗?看看这篇关于反应式编程和Java开发人员的文章。react
不能否认的是,在Dev(以及最近的OPS)领域出现的数以千计的创新中,最受讨论的话题之一是响应式编程(ReactiveProgramming)。不管是新的FWS(框架)的开发,例如ReactiveX的Java语言(RxJava)的实现,Spring 5最近使用的响应式编程的启动,仍是甚至lambdas和流在Java 8中的启动(自2014年以来),很明显,在咱们使用的代码和FWS中出现了愈来愈多的响应式思惟。spring
由于我是一个Java开发人员,因此我将尝试在这里评论一下Java开发人员今天在建立他们的应用程序时所依赖的主要选项。在平常编程的各类状况下,这多是一个很好的选择,永远记住评估使用复杂或昂贵的资源来解决问题的真正须要是很重要的(著名的大炮打蚂蚁)。然而,在对我为响应式编程技术的工具发表评论以前,我想简单地强调一下这个范例的著名支柱(根据“Reactive宣言”):编程
Elastic-对需求/负载的反应-应用程序可使用多个核心和多个服务器;服务器
Resilient-对故障的反应-应用程序对软件、硬件和链接故障的反应和恢复;微信
Message Driven-事件驱动-而不是跨多个同步线程组合应用程序,系统由异步和非阻塞事件处理程序组成;并发
Responsive-响应用户-应用程序提供丰富的,“实时”与用户的互动。框架
关于响应式编程模型,它们已经出现并获得了改进,以解决阻塞API、高延迟和同步处理等问题。按照本文的目的,目前在使用Java的项目中进行的主要搜索和使用的工具以下:异步
尽管RxJava是Java社区著名的FW,但在我看来,RxJava仍然缺少Java Web开发人员的深刻使用和研究。时至今日,这种应用仍然只存在于Android应用程序开发中。jvm
虽然RxJava没有使用消息定向做为FW的主要功能,好比Akka的参与者模型(下面我将对此进行论述),它提供了许多消息定向变得更加明显的特性。最好的例子就是Rx的subjects,简而言之,subjects 实现Publish / Subscrib 标准。
在RxJava中,Subject同时表示一个观察者和一个可观察对象,容许将事件从一个源播到多个订阅者。因为负责发布的组件不知道谁是消息的使用者,所以这个模型保证了应用程序组件之间的低耦合性。
一些Web FWS还使用Rx做为其实现的一部分,好比Vert.x,它实现了RxJava的可观察性,而且实现了一个接近反应流的结构(No Vert.x2.x)。最后,这个实现的亮点之一是RxJava也很好地处理了流的背压,容许开发人员(经过API中预约义的方法)决定如何处理被“阻塞”的流。
Akka是一个工具包和构建并发 Runtime,用于在JVM中构建并发的、分布式的、容错的、事件感知的应用程序。FW Akka能够与Java和Scala一块儿使用。Actors 是 Akka 的执行单位。参与者是抽象de ,它促进了同步、并行和分布式系统的建立。参与者背后的关键原则是应用程序只经过消息与他交互,而从不直接与他交谈。这种抽象容许基于角色的应用程序透明地扩展并保持低耦合级别。虽然这个FW不只被描述为响应性的,它呈现了 reactive 解决方案的几个特性(resilience 和 elasticity),并且即便最初是用Scala编写的,它也很容易集成到Java中。除了RxJava和Vert.x(带有reactive-streams),Akka还在其流中实现了背压控制的概念,从而能够更好地管理和处理流中的错误。
Akka已经与java集成了一段时间,可是使用java 8(带有lambdas和流)集成已经取得了更高效和更加一致的形式,如能够看到的(虽然它是2014的,仍然有不少的内容能够查到!)
该项目由一系列功能组成,这些功能容许使用fw spring 5在jvm中使用 reactive streams。该项目基于另外一个已存在的项目,称为 Reactor Cor ,该项目容许关键改进并插入在spring 5中启动的功能。不少人已经利用了最初的设计,容许您用简化的方式编写高性能、可伸缩和容错代码。这都与java开发人员已经从spring中使用的许多特性结合起来。
Reactor project 由两种主要类型组成:Mono <T>以及Flux <T>.二者都被视为数据流,最多为1(Mono)或更多(Flux)元素,并经过 Publisher —>Subscriber 模式流来工做。 Spring 5 已经发布,并列出了新的 reactive 特性,并讨论了这一点。
在今天的市场上,我相信这些是最实用和最著名的选项(有活跃的社区和全面的文档)来处理java语言中reactive programming 的概念。若是你有任何建议或一些用例来评论,我会更想知道!下次见。
有什么讨论的内容,能够加我微信公众号: