Building Reactive Microservices in Javajava
CHAPTER 2 Understanding Reactive Microservices and Vert.xreact
Reactive Programminggit
微服务并非什么新东西,他们是从上世纪70年代就研究了,不久之前已经进入应用,由于微服务是一种运行快,传值更容易,并提升敏捷性。无论怎么说,微服务是 actor-based 系统,服务设计,dynamic and autonomic 系统,domain-driven 设计 和分布式系统的根基。微服务的细粒度的模块化设计必然致使开发者建立分布式系统。我肯定你已经注意到,分布式系统是困难的,他们会时报,会变慢,受CAP 和 FLP 定理限制,换句话说,他们的创建和维护是很是复杂的,这就是响应式出现的契机。程序员
30年+的进化github
在1973年,由C. Hewitt, P. Bishop, and R. Steiger 介绍了 actor model,自动化计算一词在2001年,指出分布式计算资源自我管理的特性(自我修复,自我优化等等)。编程
可是什么是响应式(reactive),响应式是一个如今被从新赋予的词汇,牛津字典中定义的 Reactive 的意思是“showing a response to a stimulus.(对刺激的反应)”,所以,响应式软件表现和做出行为归于它所接收到的刺激。因此响应和适应性的定义对于程序员的编码是一种挑战,由于计算不是由程序员控制而是外界的刺激因子。在这个章节中,咱们将看到Vert.x怎么帮助咱们实现响应式:promise
•响应式编程--开发模型关注数据流的发展,改变,和传播。微信
•响应式系统--一个用于构建响应和强大的基于异步消息传递的分布式系统的体系结构风格。dom
一个响应式微服务是响应式系统的基石,于是,因为其异步的层面,因此实现微服务是一种挑战,响应式编程下降这种复杂度,怎么实现?如今咱们来解答这个问题。异步
响应式编程是一个发展模式,围绕面向数据流和数据传输。在响应式编程里面,刺激是数据传输的流程,咱们称之流。有不少方法来实现响应式编程模型。在这个文章中,咱们将使用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/
有什么讨论的内容,能够发我微信公众号: