您的位置:首页 > 编程语言 > Java开发

响应式微服务 in Java 译 --理解响应式微服务和Vert.x<二>

2017-12-27 00:00 411 查看
摘要: Building Reactive Microservices in Java

Building Reactive Microservices in Java

CHAPTER 2 Understanding Reactive Microservices and Vert.x

Reactive Programming

微服务并不是什么新东西,他们是从上世纪70年代就研究了,不久以前已经进入应用,因为微服务是一种运行快,传值更容易,并提高敏捷性。不管怎么说,微服务是 actor-based 系统,服务设计,dynamic and autonomic 系统,domain-driven 设计 和分布式系统的根基。微服务的细粒度的模块化设计必然导致开发者创建分布式系统。我确定你已经注意到,分布式系统是困难的,他们会时报,会变慢,受CAP 和 FLP 定理限制,换句话说,他们的建立和维护是非常复杂的,这就是响应式出现的契机。

30年+的进化
在1973年,由C. Hewitt, P. Bishop, and R. Steiger 介绍了 actor model,自动化计算一词在2001年,指出分布式计算资源自我管理的特性(自我修复,自我优化等等)。
但是什么是响应式(reactive),响应式是一个现在被重新赋予的词汇,牛津字典中定义的 Reactive 的意思是“showing a response to a stimulus.(对刺激的反应)”,因此,响应式软件表现和作出行为归于它所接收到的刺激。所以响应和适应性的定义对于程序员的编码是一种挑战,因为计算不是由程序员控制而是外界的刺激因子。在这个章节中,我们将看到Vert.x怎么帮助我们实现响应式:
•响应式编程--开发模型关注数据流的发展,改变,和传播。

•响应式系统--一个用于构建响应和强大的基于异步消息传递的分布式系统的体系结构风格。

一个响应式微服务是响应式系统的基石,因而,由于其异步的层面,所以实现微服务是一种挑战,响应式编程降低这种复杂度,怎么实现?现在我们来解答这个问题。



响应式编程是一个发展模式,围绕面向数据流和数据传输。在响应式编程里面,刺激是数据传输的流程,我们称之流。有很多方法来实现响应式编程模型。在这个文章中,我们将使用Reactive Extensions (http://reactivex.io/)中定义的将 流(streams)称 观察量(observables),消费者订阅这些可观察量,然后对这些值作出反应(Figure 2-1)。
为了使这些概念不那么抽象,我们看看用 RxJava写的一个例子 (https://github.com/ReactiveX/RxJava),这是java中实现 Reactive Extensions 的类库。这些代码位于reactive-programming repository的文件夹中。



在这个代码片段中,该代码是观察(订阅)一个可观察量,在流中的数据的传输时发送通知,订阅者可以接受三种事件,onNext 当有新的值来的时候被调用onError 会在一个error 发生或者抛出异常,onComplete会在流到达母端的时候执行,流都会在可控范围内。rxjava包括一系列操作,生成、变换和整合观测值,比如map用于将值转化为另一个值,或者flatMap产生一个观测量或者链接另一个异步操作。



RxJava v1.x 定义了不同流的类型,:

• 观测值的有界或无界流将包含一个值序列。

• 单个值的流,常常是一个操作的结果,例如futures 或者 promises。

• 完成时流没有值但是有一个操作指出成功或者失败。
RxJava 2
RxJava 2.x版本已经发布,在文章中还是使用RxJava 1.x版本,RxJava 2.x也是提供类似的概念,RxJava 2提供了两种新的类型流,观测值流不支持 back-pressure ,而 Flowable 是一个带有back-pressure的观测量。. RxJava 2 也介绍了 Maybe 类型这种模型会有 0 和 1 或者error。

我们可以用RxJava做什么?比如,我们可以描述异步的行动序列和协调他们,让我们想象你要下载一个文档,处理,上传。下载和上传是一个异步的操作,你可能开发类似这样的序列:



你也可以实现异步任务,例如,组合两个异步操作的结果,用 zip 操作组合两个流的值:



这些操作符的使用还给你超强能力:你可以优雅的整合异步任务和数据流,这么联系到响应式微服务呢?在回答这个问题之前,我们先看一眼响应式系统。

Reactive Streams
你可能已经听过Reactive Streams(http://www.reactive-streams.org),Reactive Streams提供了一个标准处理异步的 back-pressure stream。它提供了最小的一组接口和协议,描述了实现与非阻塞back-pressure数据异步流的操作和实体。它不定义操作员操作流,主要是用来作为一个互操作层。这个倡议得到了Netflix, Lightbend, Red Hat 和其他组织的支持。

原文地址:
https://developers.redhat.com/promotions/building-reactive-microservices-in-java/


有什么讨论的内容,可以发我微信公众号:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息