當前位置:
首頁 > 最新 > 從零開始學習Vert.x

從零開始學習Vert.x

又到了周末了,可以好好休息一下,雖然手上事情也不多,不過每天都還是邀加班到9點,自己沒事就倒騰點其他事情,比如說學用git啊這些!因為任務就那麼多,上周開發快遞100介面,查看物流信息業務。有現成的Demo,基本直接拿來用就可以了,感覺沒什麼意思!還有一件特別尷尬的事情,甲方選擇的快遞公司快遞100不支持!據說錢都付了。我看了下快遞100目前支持的快遞國內和國外的總共800多家,但是bose選擇的是一個上海的小快遞公司,官網都沒用,更不要說查詢物流信息了!!!!唉,也是醉了,看明天PM怎麼解決這個問題吧

其實本來想學習一下Node的課程的,環境也搭建好了,感覺原生的js水平不夠,這個有空我還是再過一遍原生的js,其實自己用的時候還是一jquery為主,畢竟都是DOM操作,沒那麼多其他業務,所以放棄了Node,重新撿起了以前放棄的vert.x,其實去年底就了解過這方面的知識,但是當時水平差太多了(其實現在也差),看著感覺很吃力,所以就放棄了。關於vert.x我這裡就不介紹了,它就是eclipse基金會搞的一個開源的項目,eclipse大家肯定知道了!目前支持的語言還是很多的,java、kotlin、scala、javaScript、ruby等等。如果不了解vert.x的小夥伴網上搜索一下,多看一點相關的博客或者技術文章。官網地址:https://vertx.io/。

vert.x要求java JDK版本至少為1.8,因為它涉及到很多函數式、lambda相關的內容,所以如果你還沒有學習這方面的內容或者不是很熟悉的話,建議補充下相關知識。以前自己放棄就有這方面的因素,所以自己後來專門自己列印了一般java1.8函數式編程相關的書籍。今天重新開始看這部分的知識其實還是有點吃力,vert.x內容也是相當的豐富!但是它和spring又不一樣,按照官網的那句話:Eclipse Vert.x is event driven and non blocking. This means your app can handle a lot of concurrency using a small number of kernel threads. Vert.x lets your app scale with minimal hardware.對就是事件驅動且非阻塞,支持高並發、需要更少的內核線程,並且對硬體要求也低。當然spring現在也在朝這個方向努力,比如最新的webFlux。

vert.x主要包括幾個部分:core核心包,主要是一些基礎功能的支持,比如http、tcp以及系統文件訪問和其他一些特性;Web包,web包主要是構建web項目和微服務需要用到的工具包;dataAccess包,這個是和資料庫交互的包,關係型和非關係型資料庫都有很好的支持,關係型資料庫目前只有mysql和postgresql客戶端,其他的需要依賴JDBC,非關係型redis、mongoDB;此外還有Reactive、Microservices、Authentication and Authorisation,這裡面Reactive自己基本不了解。

vert.x官方文檔還是比較全的,也有列子!此外也有官方文檔的中文翻譯:https://vertxchina.github.io/vertx-translation-chinese/start/Start.html。當然還是建議多看英文文檔,結合谷歌翻譯插件還是很方便的。

今天自己就從hello world開始vert.x的學習,官網支持vert.x項目的下載

只需要指定版本並選擇所需要的依賴就可以了,然後下載,解壓,導入到idea就可以了,當然也完全可以自己新建項目然後自己添加依賴。因為是第一個vert項目,所以我選擇了第一種方式!另外因為需要對資料庫訪問,所以添加了mysql的jar包,整個項目的pom文件:

打開我們的項目我們發現在項目目錄下已經給我們生成了一個MainVerticle.java類,這一點和springboot為我們生成Application.java很相似。但是不同的是這個MainVerticle.java並不是我們程序啟動的入口,這一點看我們的pom文件也可以看出來,我們想輸出是一個fat.jar。下面我們先看下vert.x自動創建項目生成的代碼。

MainVerticle繼承了AbstractVerticle類,並重寫了start()方法,只看邏輯的話應該是沒問題的,就是由vertx創建一個http服務,用來響應用戶的請求,響應頭設置的content_type為「text/plain」,即純文本形式,響應的內容就是「Hello from Vert.x!」,監聽的埠號是8080。當然看到代碼確實可以理解,但是真要自己寫還是感覺有點難,代碼寫好了,那麼我們應該怎麼啟動呢?上面說了這個項目輸出會是一個fat.jar,這樣就可以和當初學springboot一樣通過命令行啟動。先使用maven打成fat.jar

通過控制台終端,輸入:java -jar firstVert-1.0.0-SNAPSHOT-fat.jar啟動,看到命令行輸出後,我們到瀏覽器輸入localhost:8080

還有一種方式就是通過java的main函數啟動,在項目下新建一個Main.java

然後啟動main,這時候訪問瀏覽器和上面那種方式的結果是一樣的。

上面的代碼中MainVerticle繼承了AbstractVerticle,並重寫了無入參的start()方法,現在我們使用另一種方式,重寫有入參的start()方法。通常我們訪問頁面的時候是先查詢資料庫,然後將數據傳遞給前台頁面,進行渲染展示的。

所以這次我們先獲取資料庫連接,連接成功後再創建httpServer。帶入參的start方法攜帶的參數為Future,future我的理解就是非同步的作用(不知道這樣對不對,就是一個信號,提示操作是否成功,如果成功..失敗..)。把剛才的代碼注釋掉,重寫一個帶入參的start()方法:

這裡先使用JDBC客戶端獲取資料庫的連接,如果成功後創建httpServer並設置相關信息。如果失敗則是不會創建httpServer的。在startHttpServer()方法內,我們新建一個router,它可以路由多個地址,比如我的代碼裡面路由地址是「/index」,也就是只處理這個一個請求,或者也可以指定get、post、head請求方式。這裡做簡單了解就好了httpServer請求的處理器又router接收用戶請求並路由到相關的路徑上去,監聽埠號依然是8080。

大概理清這個邏輯以後我們啟動一下,我這裡就選擇main方法啟動了。從輸出可以知道我們的資料庫肯定連接成功了,不然不會執行到startHttpServer()方法

然後我們瀏覽器訪問一下:localhost:8080未找到資源,說明我們的訪問路徑有問題,再次訪問localhost:8080/index:

說明我們的路由設置也是成功的。

如果我將資料庫的密碼改一下,也就是我不能連接資料庫的話,我們看看startHttpServer()方法還會不會執行。

可以看出startHttpServer()沒有執行,且拋出了異常信息,用戶訪問需要密碼,因為密碼是錯的。

通過這個很小的項目來看,感覺vert.x還是比較難的,和以往的web有很大的不同,而且很多基礎的概念都還需要理解,只能後面慢慢學習,因為自己水平有限,如果有錯誤的地方,請大家指正!!!謝謝~~~~~

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 超超雜談 的精彩文章:

spring security初探

TAG:超超雜談 |