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/
有什麼討論的內容,能夠發我微信公衆號: