響應式微服務 in Java 譯<五> --Verticles—the Building Blocks

Verticles—the Building Blocksjava

Vert.x 給了你很大的自由空間來構建你的應用和代碼,Vert.x也封裝了語法糖來更方便的編寫Vert.xy應用,一個簡單的,可擴展的,actor-like部署和併發模型,Verticles是由Vert.x部署和運行的的代碼塊。一個應用,例如微服務,會在同一個時間,同一個 Vert.x 實例中運行大量的 Verticle實例,一個 Verticle建立服務端或者客戶端,註冊了一系列的Handlers,封裝系統的業務邏輯的一部分。react

Regular verticles 在 Vert.x event loop 中執行而且不會被阻塞,Vert.x 確保每一個verticle老是被同一個線程執行而且不併發,從而避免了同步結構。在java中,verticle是一個類,繼承了Abstract Verticle 類:數據庫

Worker Verticle編程

不像regular verticles,worker verticles 不在event loop中執行,這就意味着他們能夠執行阻塞的代碼。然而,這限制你的可拓展性。微信

Verticles能夠訪問vertx member(AbstractVerticle類提供)來建立servers 和 clients,還有其餘的verticles。Verticles 也能夠部署其餘的verticles,配置他們,設置實例的數字。實例也能夠關聯到不一樣的event loop(multireactor模式的實現),Vert.x負責不一樣實例之間的負載均衡。併發

From Callbacks to Observables負載均衡

正如你以前的章節所示,Vert.x開發模型使用了回調。當操做多個異步操做,這個回調函數爲基礎的發展模式,每每會產生複雜的代碼。例如,咱們看一下如何從數據庫讀取數據,第一,咱們須要一個數據庫鏈接,而後發送一個數據庫查詢請求,獲取執行的結果,而後釋放鏈接。全部的這些操做都是異步的。使用回調。你可能編寫相似這樣的Vert.x JDBC 客戶端:異步

雖然即便可控,這個例子顯示了回調會把你的代碼快速變成不可讀,所以你可使用 Vert.x futures函數

處理一些異步操做。不像Java Futures,Vert.x Futures 是非阻塞的,Futures提供了高度化的封裝構建一系列的操做或者並行執行操做。下一段代碼是比較有表明性的,咱們組裝futures構建一系列的異步操做:微服務

無論怎樣,Futures使代碼變得更加易於理解,咱們把全部行放到一個批處理而且執行。這個結果能夠是巨大的,須要大量的時間進行檢索。與此同時,你並不需呀整個結果返回纔開始執行。你能夠根據獲得的數據一行數據一個個依次執行。幸運的是,Vert.x 提供了一個爲這種編程挑戰提供了方案,提供一種方式,使用響應式開發模型來促進響應式微服務的編程開發,Vert.x 提供了 RxJava APIs:

  • 組合和協調異步任務

  • 傳進來的消息做爲輸入流

讓咱們用 RxJava APIs 重寫先前的代碼:

 

除了提升可讀性,響應式編程容許你訂閱結果流,儘快地執行它。使用 Vert.x,你能夠選擇你本身偏心的開發模型。在這份文檔中,回調和RxJava都會使用。

原文地址:

https://developers.redhat.com/promotions/building-reactive-microservices-in-java/

有什麼討論的內容,能夠發我微信公衆號:

相關文章
相關標籤/搜索