Vert.x 最大的特點在於異步(底層基於Netty),通過事件循環(EventLoop)來調起存儲在異步任務隊列(CallBackQueue)中的任務,大大降低了傳統阻塞模型中線程對操作系統的開銷。異步模型能夠很大程度的提高系統的並發量。
1、Vertx能做什么
Java能做的,Vert.x 都能做
1) Web 開發,支持路由,Session管理,模板等,不需要容器。
2)TCP/UDP開發,Vert.x 底層基於Netty,提供了豐富的IO類庫,支持多種網絡應用開發。
3)提供對WebSocket的支持
4)Event Bus(事件總線)是Vert.x的神經系統,通過事件總線可以實現分布式消息,遠程方法調用等。正式因為Event Bus,Vert.x 可以非常便捷的開發微服務應用。
5)支持主流的數據和消息訪問
redis,mongodb, rabbitmq, kafka等。
6)分布式鎖,分布式計數器,分布式map的支持。
2、什么是Vert.x
簡單的說,Vert.x 就是一堆jar包, 提供了一些列編程API接口,通過這些API,可以實現異步編程。
Vert.x 可以開發Web應用,但Vert.x 不僅僅是一個Web開發框架,他更像Spring,是一個技術棧,或者說是一個Vert.x生態體系。
(Vert.x生態可以查看https://github.com/vert-x3/vertx-awesome),在這個體系中,Vert.x 只是提供了Web開發的能力,下面對Vertx和Spring做一個對比:
項目 | Spring | Vertx |
核心框架 | spring-core | vertx-core |
Web開發 | spring-webmvc | vertx-web |
jdbc框架 | spring-jdbc | vertx-jdbc-client |
redis | spring-data-redis | vertx-redis-client |
微服務 | spring-cloud | vertx-hazelcast |
spring和Vertx的區別,Spring的操作是同步的,Vertx的操作時異步的。異步帶來了更高的性能,但同時也帶來了編碼和調式的復雜度。
絕大部分企業可能都在使用SpringMVC,Vert.x這個Web層框架,卻很少有人知道,但它卻是僅次於SpringMC排名第二的Web層框架
3、Vert.x的一些優勢
1) 異步非阻塞
使用上和ajax非常像。
2)Vertx支持多種編程語言
在Vert.x 上,可以使用JavaScript, Java, Scala, Ruby, Kotlin等等。
3) 不依賴中間件
Vert.x 的底層依賴Netty, 因此在使用Vert.x構建Web項目時,不依賴中間件,向Node一樣,可以直接創建一個HttpServer。
4) 完善的生態
Vert.x 和Spring的對比,有一種MacOS和Windows對比的感覺。
5)為微服務而生
4、Vert.x 技術體系
Vert.x有完善的生態,具體可查看https://github.com/vert-x3/vertx-awesome
1) 核心模塊
Vert.x核心模塊包含一些基礎的功能,如HTTP,TCP,文件系統訪問,EventBus、WebSocket、延時與重復執行、緩存等其他基礎的功能,你可以在你自己的應用程序中直接使用。可以通過vertx-core模塊引用即可。
2)Web模塊
Vert.x Web是一個工具集,雖然核心模塊提供了HTTP的支持,但是要開發復雜的Web應用,還需要路由、Session、請求數據讀取、Rest支持等等還需要Web模塊,這里提供了上述的這些功能的API,便於開發。
除了對Web服務的開發以外,還提供了對Web客戶端請求的支持,通過vertx-web-client即可方便的訪問HTTP服務。有朋友可能會有疑惑,我明明可以使用JDK提供的URL來請求HTTP服務啊。使用Vert.x一定要注意,Vert.x是一個異步框架,請求HTTP服務是一個耗時操作,所有的耗時,都會阻塞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)整合其他模塊
6)認證與授權
7)微服務
Vert.x提供多個組件構建基於微服務的應用程序。
比如服務發現(Vert.x Service Discovery)、斷路器(Vert.x Circuit Breaker)、配置中心(Vert.x Config)等
參考: https://blog.csdn.net/king_kgh/article/details/80772657