Java开发人员的反应编程介绍 - Fernando Almeida


不可否认的是,在Dev(和Ops最近)领域出现的数千项创新中,讨论最多的主题之一是反应式编程。新的FW框架不断推出,例如ReactiveX(RxJava)的Java语言的实现,最近推出的带有反应式编程的Spring 5,甚至是Java 8中的lambdas和流的推出(自2014年起),很明显,越来越多的反应性思维正在我们使用的代码和FW中出现。
由于我是Java Dev,我将尝试在此处评论Java开发人员今天所依赖的主要选项以便创建他们的应用程序。在日常编程的各种情况下,这可能是一个很好的选择,将复杂或昂贵的资源用来解决真正的问题是很重要的(着名的杀戮大炮)。但是,在对各种工具进行评论之前,我想简要介绍一下这种范式的著名支柱(根据Reactive Manifesto):

  • 可伸缩性Elastic  - 对需求/负载做出反应 - 应用程序可以使用多个核心和多个服务器;
  • 弹性Resilient  - 对故障做出反应 - 应用程序对软件,硬件和连接故障做出反应并从中恢复;
  • 消息驱动 - 事件驱动 - 系统由异步和非阻塞事件处理程序组成,而不是跨多个同步线程组合应用程序;
  • 响应性 -对用户做出反应- 为用户提供丰富的“实时”交互的应用程序。

关于反应式编程模型,它们已经出现并得到改进,以解决称为阻塞API,高延迟和同步处理等问题。根据本文的目的,目前,使用Java的项目中的主要搜索和使用包括以下工具:

RxJava
尽管作为Java社区的着名FW,在我看来,RxJava仍然缺乏Java Web开发人员的深入使用和研究。今天,仅在Android应用程序开发中仍然存在使用。
虽然RxJava不使用消息方向例如Akka actor模型(我将在下面评论)作为FW的主要功能,,但它提供了许多功能,其中消息方向变得更加明显。最好的例子是Rx的主题。简而言之,主题实现了发布/订阅标准。
在RxJava中,主题Subject同时表示Observer和Observable,允许将事件从单个源多播到多个订阅者。由于负责发布的组件不知道谁将成为消息的消费者,因此该模型保证了应用程序组件之间的低耦合。
一些Web FW也使用Rx作为其实现的一部分,如Vert.x,它实现了RxJava的Observable,并且还实现了接近Reactive-Streams的结构(No Vert.x 2.x)。最后,这个实现的一个亮点是RxJava还可以很好地处理流的背压,允许开发人员(通过API中的预定义方法)决定如何处理“阻塞”的流。

Akka
Akka是一个工具包和运行时,用于在JVM中构建并发,分布式,容错,事件感知应用程序。FW Akka可以与Java和Scala一起使用。演员Actor是阿卡的执行单位。actor是一种抽象,有助于创建同步,并行和分布式系统。演员背后的关键原则是应用程序仅通过消息与他交互,而不会直接与他交谈。这种抽象允许基于actor的应用程序透明地扩展并保持低耦合级别。虽然这个FW不仅具有反应性,但它​​具有反应性解决方案的几个特征(如弹性和弹性),即使最初用Scala编写,它也很容易与Java集成。除了RxJava和Vert.x(带有反应流),
Akka已经与Java集成了一段时间,但是使用Java 8(带有lambda和流),集成已经采用了更高效和更一致的形式。


Reactor Project
该项目包含一系列功能,允许使用FW Spring 5在JVM中处理活动流。该项目基于另一个名为Reactor Cor的预先存在的项目,该项目允许Pivotal改进并插入在Spring 5中启动的那些功能。利用原始设计,允许您以简化的方式编写高性能,可扩展和容错的代码。这一切都与Java开发人员已经从Spring使用的许多功能相结合。
Reactor项目由两种主要类型构建,Mono <T>和Flux <T>。两者都被视为数据流,最多1个(单Mono )或更多(Flux)元素,并通过支持发布者→流的订阅者模式来工作。Spring 5已经发布,这里列出并讨论了新的反应功能。


在今天的市场中,我认为这些是最实用和众所周知的选项(具有活跃的社区和全面的文档),可以使用Java语言中的反应式编程概念。