1. 程式人生 > 實用技巧 >初識Vert.x(一)

初識Vert.x(一)

摘要

  近年來,行動網路、社交網路和電商的興起,使各大服務提供商的客戶端請求數量激增,傳統伺服器架構已不堪重負,致使基於事件和非同步的解決方案備受追捧,如Nginx、NodeJS。Vert.x框架基於事件和非同步,依託於全非同步Java伺服器Netty,並擴充套件了很多其他特性,以其輕量、高效能、支援多語言開發而備受開發者青睞(百度百科)。

 

本篇主要從以下方面簡單介紹一下Vert.x

1、Vert.x是什麼

2、Vert.x有什麼用

3、Vert.x的優點

4、Vert.x的技術體系

1、Vert.x是什麼

  Vert.x借鑑了Erlang和Akka架構設計,充分利用了多核處理效能實現高併發需求的一種框架。Vert.x最大的特點就是非同步(基於Netty非同步通訊),通過事件迴圈(EventLoop)呼叫儲存在非同步佇列(CallBackQueue)中的任務,從而降低傳統模式中執行緒對作業系統的阻塞開銷,並且能夠很大程度上提高系統的併發量。

  但也由於Vert.x的非同步帶來編碼上的複雜性,如果想通過Vert.x編寫優美的程式碼,則需要一定功底才行,並且需要熟悉Lamdda表示式、函數語言程式設計、Reactive等技術。

  Vert.x執行在JVM上,並且支援多種程式語言,同一個應用,你可以選擇多種程式語言同時開發。在Vert.x 2版本,也就是基於JDK7,還沒有Lambda的時候,基本使用JavaScript作為開發語言相對較多;但到Vert.x3的時代,JDK8的出現,使Java已經作為Vert.x主流的開發語言,而Vert.x也被更多的開發者所接受。

2、Vert.x有什麼用

(1)web開發。Vert.x封裝了Web開發常用的元件,支援路由、Session管理、模板等,可以非常方便的進行Web開發。並且不需要容器

(2)TCP/UDP開發。Vert.x提供了豐富的IO類庫,支援多種網路應用開發(如HTTP、MQTT)。不需要處理底層細節(如拆包和粘包),注重業務程式碼編寫。

(3)Event Bus(事件匯流排)。Event Bus是Vert.x的核心神經系統,通過Event Bus可以實現分散式訊息,遠端方法呼叫等等。因為Event Bus的存在,Vert.x可以非常便捷的開發微服務應用。

(4)支援主流資料庫和訊息訪問。Vert.x支援MongoDB、MySQL、Redis、kafka等。

(5)分散式鎖、分散式計數器、分散式Map等。

3、Vert.x的優點

(1)非同步非阻塞(非同步無鎖程式設計)

Vert.x就像是跑在JVM之上的Nodejs,所以Vert.x的第一個優勢就是這是一個非同步非阻塞框架。上面也提到了非同步,我們使用ajax來演示的非同步,下面使用Vert.x請求遠端地址一個程式碼,可以看到和ajax非常像!

 1 System.out.println("1")
 2  
 3 WebClient
 4     .create(vertx)
 5     .postAbs(REQUEST_URL) // 這裡指定的是請求的地址
 6     .sendBuffer(buffer, res -> { // buffer是請求的資料
 7  
 8         if (res.succeeded()) {  
 9             // 請求遠端服務成功
10             System.out.println("2")
11             
12         } else {
13             // 請求失敗
14             resultHandler.handle(Future.failedFuture("請求伺服器失敗..."));
15         }
16     });
17  
18 System.out.println("3")

Vert.x必須執行在JDK8上,因為JDK8提供了lambda表示式,可以簡化匿名內部類的編寫,可以極大的挺高程式碼的可讀性。

(2)支援多種程式語言

(3)完整的生態環境

Vert.x和Spring的對比,有一種使用MacOS和Windows對比的感覺。Vert.x和龐大的Spring家族體系不同,Vert.x提供資料庫操作,Redis操作,Web客戶端操作,NoSQL資料庫的一些操作等常用的結構;雖然簡單,但足夠使用。

(4)為微服務而開發

Vert .x提供了各種元件來構建基於微服務的應用程式。通過EventBus可以非常容易的進行服務之間的互動。並且提供了HAZELCAST來實現分散式。

(5)豐富的IO支援模組化

4、Vert.x的技術體系

(1)核心模組

Vert.x核心模組包含一些基礎的功能,如HTTP,TCP,檔案系統訪問,EventBus、WebSocket、延時與重複執行、快取等其他基礎的功能,你可以在你自己的應用程式中直接使用。可以通過vertx-core模組引用即可。

(2)web模組

Vert.x Web是一個工具集,雖然核心模組提供了HTTP的支援,但是要開發複雜的Web應用,還需要路由、Session、請求資料讀取、Rest支援等等還需要Web模組,這裡提供了上述的這些功能的API,便於開發。

Vert.x是一個非同步框架,而請求HTTP服務是一個耗時操作,在Vert.x中所有的耗時,都會阻塞EventBus,導致整體效能被拖垮,因此,對於請求Web服務,一定要使用Vert.x提供的vertx-web-client模組。

(3)資料訪問模組

Vert.x提供了對關係型資料庫、NoSQL、訊息中介軟體的支援,傳統的客戶端因為是阻塞的,會嚴重影響系統的效能,因此Vert.x提供了對以上客戶端的非同步支援。

具體支援的資料訪問如下:MongoDB client,JDBC client,SQL common,Redis client,MySQL/PostgreSQLclient

(4)Reactive響應式程式設計

(5)整合其他模組

郵件客戶端、STOMP客戶端與服務端、Consul Clien、RabbitMQ Client 、Kafka Client、訊息隊裡的客戶端支援、JCA介面卡。

(6)認證與授權

(7)微服務

Vert.x提供多個元件構建基於微服務的應用程式。

如:微服務發現(Vert.x Server Discovery)、斷路器(Vert.x Circuit Breaker)、配置中心(Vert.x Config)

參考文獻:

https://blog.csdn.net/king_kgh/article/details/80772657

Vert.x官網:https://vertx.io/docs/#integration

https://github.com/vert-x3/vertx-awesome

因為剛好有需求需要用到Vert.x,找遍了所有網站,發現記錄Vert.x的少之有少,因此記錄下這次學習。

由於也是初學若有哪裡不對的地方還請見諒,並希望能指出,非常感謝。