衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Quarkus入門實踐

jf_ro2CN3Fa ? 來源:芋道源碼 ? 作者:芋道源碼 ? 2022-11-03 14:15 ? 次閱讀

1. 概述

1.1 定義

1.2 GraalVM 簡介

1.3 為何使用

1.4 特性

1.5 官方性能數據

2. 實戰

2.1 安裝 GraalVM

2.2 創建 Quarkus 工程

2.3 IDEA 導入項目

2.4 IDEA 運行和調試

2.5 打包成普通的 Jar

2.6 打包成依賴 GraalVM 二進制文件

2.7 打包成不依賴 GraalVM 的二進制文件

2.8 制作 docker 鏡像

1. 概述

1.1 定義

Quarkus定位要做超聲速、亞原子的Java框架,使用最好標準為OpenJDK HotSpot和GraalVM量身定制的Kubernetes Native Java棧;從一開始就是針對Kubernetes設計的云原生優化Java應用開發框架;兼容主流的框架開發模式如Jpa、Netty、Undertow、Hibernate、JWT、Spring。最新版本為2.13.3。

Quarkus 官網:https://quarkus.io/

Quarkus GitHub:https://github.com/quarkusio/quarkus

1.2 GraalVM 簡介

GraalVM 是 Oracle 開發的高性能的多語言運行時 JDK,旨在提高 Java 應用程序的性能,同時消耗更少的資源。

GraalVM 提供了兩種運行Java應用程序的方法:在HotSpot JVM上使用 Graal 即時(JIT)編譯器或者作為預先(AOT)編譯的本機可執行文件。

除了 Java,它還提供了 JavaScript、Ruby、Python 和其他一些流行語言的運行時。GraalVM 的多語言功能使得在一個應用程序中混合編程語言成為可能,同時消除了任何外語調用成本。目前最新版本為 22.3。

cd27fac4-5b3d-11ed-a3b6-dac502259ad0.png

GraalVM 可以創建原生可執行文件;

GraalVM 提供的原生鏡像(native image)功能可以把Java代碼預先編譯(Ahead-Of-Time,AOT)成獨立的可執行文件。該可執行文件包括了應用本身的代碼、所依賴的第三方庫和 JDK 本身。該執行文件并不運行在 Java 虛擬機之上,而是名為 Substrate 的虛擬機。與運行在傳統的 Java 虛擬機上相比,原生可執行文件在運行時的啟動速度更快,所耗費的內存資源更少。可執行文件的體積也更小;

GraalVM 生成的原生可執行文件與底層平臺相關,不能在當前平臺之外的其他平臺上運行。但對云原生應用來說,這并不是一個問題。云原生應用的設計目標是在容器中運行,所運行的底層平臺是固定的。

1.3 為何使用

使用 Spring Boot 的快速開發企業級應用的微服務啟動慢,從一個應用從啟動到服務可用,一般是數秒。在對 CPU 核數和內存嚴格限制的情況下,花數十秒啟動的情況也屢見不鮮。這樣的問題無法適應需要快速重啟或快速擴容的場景。不僅如此,內存消耗也很大。如果限制在 1G 時 FullGC 頻率變大,且經常觸發 OMM 后 Kill 導致 pod 重啟,并且啟動時間也會變長。

相比之下,集群中使用 GO 語言開發的應用則配置 128M 內存也可正常使用。以 JVM 模式運行的 Java 應用,并不太適合于云原生應用的開發,而擁抱云原生則是未來技術的大趨勢。

容器云已經為未來主流,也即是軟件都是運行在 K8S 這樣的容器集群里。而容器環境需要應用具備啟動速度快,資源占用小,響應時間短等特性。Quarkus 順應這種趨勢而生的。

對于云原生應用來說,平臺無關性變得無關緊要。云原生應用都是以容器化的形式運行的,所運行的底層平臺是固定的;

云原生應用對啟動速度的要求比較高。當需要進行水平擴展時,要求這些新的實例必須在足夠短的時間內完成啟動,從而盡快的處理新增的請求;

云原生應用要求在運行時占用盡可能少的資源。盡可能的減少單個實例占用的資源,就意味著可以用同樣的成本,支持更多的訪問請求;

云原生應用要求更小的打包體積。云原生應用以容器鏡像的形式打包。應用鏡像的尺寸越大,所需要的存儲空間也會越大,推送和拉取鏡像所耗費的時間也會更長。

Quarkus具備企業級應用開發能力。

在 Serverless 服務器架構、微服務、容器、Kubernetes、功能即服務(FaaS)和云環境中運行 Java 而言,考慮了所有這些因素的 Quarkus 堪稱是一個有效的解決方案。

1.4 特性

容器優先

構建期即生成云原生鏡像執行文件。

Quarkus 為 GraalVM 和 HotSpot 定制應用程序。快速啟動、低內存消耗、體積小,在 Kubernetes 這樣的容器編排平臺上提供了近乎實時的擴展和高密度的內存利用率。這就是使用了編譯時引導的技術。

支持 Graal/SubstrateVM

構建時元數據處理

盡量減少 JNI 調用

減少反射的使用

本機映像預啟動

Kubernete 原生

構建期即生成云原生鏡像執行文件,可以與 Docker 和 Kubernetes 輕松集成,Quarkus 和 Kubernetes 的組合可以伸縮、快速創建輕量級的應用程序。Quarkus 通過工具、預構建的集成、應用程序服務等顯著提高了開發人員的工作效率。

命令式和響應式

在設計上 Quarkus 能夠在開發應用時無縫地結合熟悉的命令式代碼和非阻塞、響應式樣式。這對于習慣使用命令式模型而不想切換風格的 Java 開發人員以及使用云原生/響應式方法的開發人員都非常有用。

社區和標準

擁抱 JavaEE 標準,使用 JavaEE 官方 RESTful、CDI 等標準接口。Quarkus 提供了一個內聚的、輕量的全棧框架,包含超過 50 個使用的最佳類庫。

開發者友好

學習成本也低,具有統一的配置和簡單的本地可執行文件生成,零配置,實時重新加載,80% 的常用標準和 20% 靈活應用。

1.5 官方性能數據

cd3b8238-5b3d-11ed-a3b6-dac502259ad0.png

從圖中可以看出,使用 Quarkus 和 GraalVM 的簡單的 REST 應用的啟動時間僅為 16 毫秒,占用內存僅 12MB。如果使用傳統的基于 Java 虛擬機實現,應用的啟動時間需要 4.3 秒,占用內存為 136MB。

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

項目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro

視頻教程:https://doc.iocoder.cn/video/

2. 實戰

入門示例項目步驟:

安裝 GraalVM

創建 Quarkus工程

IDEA 導入項目

IDEA 編碼運行和調試

打包成普通的 jar

打包成依賴 GraalVM 的二進制文件

打包成不依賴 GraalVM 的二進制文件

制作成 Docker 鏡像

2.1 安裝 GraalVM

GraalVM 官方文檔:https://www.graalvm.org/22.2/docs/

GraalVM GitHub:https://github.com/graalvm/graalvm-ce-builds/releases

了解 GraalVM 的最新版本 22.3 的使用可以查閱 GraalVM 官方文檔。先從 GitHub 下載 GraalVM 。這里先以下載windows版本為例,下載后的文件 graalvm-ce-java11-windows-amd64-22.2.0.zip,解壓到本地磁盤目錄,查看版本信息如下:

cd51bcf6-5b3d-11ed-a3b6-dac502259ad0.png

>基于SpringCloudAlibaba+Gateway+Nacos+RocketMQ+Vue&Element實現的后臺管理系統+用戶小程序,支持RBAC動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能
>
>*項目地址:
>*視頻教程

#windows
PATH環境變量增加路徑:D:ProgramFilesJavagraalvm-ce-java11-22.2.0in
JAVA_HOME配置環境變量:D:ProgramFilesJavagraalvm-ce-java11-22.2.0

#linux
wgethttps://github.com/graalvm/graalvm-ce-builds/releases/download/vm-22.2.0/graalvm-ce-java17-linux-amd64-22.2.0.tar.gz
tar-xvfgraalvm-ce-java17-linux-amd64-22.2.0.tar.gz

exportGRAALVM_HOME=/home/commons/graalvm-ce-java17-22.2.0
exportPATH=$PATH:$GRAALVM_HOME/bin
exportJAVA_HOME=${GRAALVM_HOME}
exportPATH=$PATH:$JAVA_HOME/bin
exportMAVEN_HOME=/home/commons/apache-maven-3.8.6
exportPATH=$PATH:$MAVEN_HOME/bin

2.2 創建 Quarkus 工程

萬丈高樓平地起,首先是創建 Quarkus 項目。與 Spring Boot類似,Quarkus 為我們提供了多種方式創建 Quarkus 工程,下面對常用的 3 種進行介紹。

IDEA 支持創建 Quarkus 項目

cd607f98-5b3d-11ed-a3b6-dac502259ad0.png

maven 命令支持創建(使用的是 apache-maven-3.8.6)

mvnio.quarkuscreate-DprojectGroupId=cn.itxs-DprojectArtifactId=quarkus-web-demo-m-DprojectVersion=1.0-SNAPSHOT-DclassName=FirstResource-Dpath=actions

通過官方提供 Quarkus 代碼生成 https://code.quarkus.io/ 頁面在線創建,這種方法直觀且簡單(不用記命令),推薦使用。添加自己的 maven 配置,然后下載網站生成的工程包。

cd76e620-5b3d-11ed-a3b6-dac502259ad0.png

我們先以第三種為例說明,通過在線網頁生成 quarkus-web-demo.zip。解壓后用 tree 命令看看項目結構,是一個標準的 maven 工程,多了個 docker 目錄,里面有幾個 Dockerfile 文件相關的問題。

目錄結構如下:

cd9f54b6-5b3d-11ed-a3b6-dac502259ad0.png

2.3 IDEA 導入項目

IDEA 導入上面的 Maven項目,幾分鐘下載依賴后項目已成功導入。可以看到 Quarkus 項目的 pom 文件核心依賴為 quarkus-bom。Quarkus 官方認為傳統的接口就是一個個對外方法的資源,所以在 Quarkus 里面是以 Resource 資源的概念來進行的。

cdacad46-5b3d-11ed-a3b6-dac502259ad0.png

2.4 IDEA 運行和調試

在 IDEA 要運行和調試 Quarkus 的項目,首先得在項目添加 SDK,并將路徑指向剛才解壓的目錄。

cdc22e46-5b3d-11ed-a3b6-dac502259ad0.png

修改項目的 GreetingResource 源文件示例方法返回值內容"Hello ITXS RESTEasy",同樣也修改單元測試 GreetingResourceTest 的測試方法的值為上面的內容,在運行菜單中點擊添加新的 Quarkus 配置。

cddff48a-5b3d-11ed-a3b6-dac502259ad0.png

新建后點擊運行按鈕(mvn compile quarkus:dev ),正常運行輸出日志如下:

cdfed396-5b3d-11ed-a3b6-dac502259ad0.png

訪問本地 http://localhost:8080/hello 后可以看到正確的返回結果,同樣也可以直接點擊調試按鈕進入調試模式。

ce217694-5b3d-11ed-a3b6-dac502259ad0.png

2.5 打包成普通的 Jar

通過 maven 的 package 打包后,生成打包目錄如下:

ce336110-5b3d-11ed-a3b6-dac502259ad0.png

可以直接通過 java -jar 運行 quarkus-app 目錄下 quarkus-run.jar 和 quarkus-web-demo-1.0.0-SNAPSHOT-native-image-source-jar 目錄下的 quarkus-web-demo-1.0.0-SNAPSHOT-runner.jar。不到 1 秒的時間就啟動完畢了。

訪問上面測試地址同樣可以看到正確的結果:

ce4ce5b8-5b3d-11ed-a3b6-dac502259ad0.png

2.6 打包成依賴 GraalVM 二進制文件

此方法打包的二進制文件仍需要依賴 GraalVM,但由于代碼已經做了靜態編譯處理,所以執行效率有大幅提升,比較適合容器化啟動。

先安裝 VS C++依賴,下載 Visual Studio Installer,需要取消中文并選擇英文。然后使用 powershell 進入到項目根目錄,執行 mvn package -Pnative 命令后報錯:

ce61adae-5b3d-11ed-a3b6-dac502259ad0.png

根據提示安裝 native-image 執行安裝命令和確認是否配置了 GRAALVM_HOME、JAVA_HOME 環境變量

guinstallnative-image
#重新執行打包
mvnpackage-Pnative
ce71349a-5b3d-11ed-a3b6-dac502259ad0.png

直接運行生成的可執行文件 quarkus-web-demo-1.0.0-SNAPSHOT-runner,確實飛快,啟動時間只要 0.033s,訪問hello也正常顯示。

ce7fbc68-5b3d-11ed-a3b6-dac502259ad0.png

2.7 打包成不依賴 GraalVM 的二進制文件

需要本機先裝有 docker 的環境,這里用的是 docker desktop。打包有多種方法,可以直接 maven 參數構建,也可以在 appllications.properties 文件中增加構建參數。

quarkus.native.container-build=true
quarkus.native.native-image-xmx=4096m
ce9cb8ea-5b3d-11ed-a3b6-dac502259ad0.png
#終端命令中執行打包
mvncleanpackage-Dnative
ceb9a234-5b3d-11ed-a3b6-dac502259ad0.png

2.8 制作 docker 鏡像

直接通過 Dockerfile.native 制作 docker 鏡像:

dockerbuild
-fsrc/main/docker/Dockerfile.native
-tbolingcavalry/quarkus-web-demo:0.0.1.

執行 docker 命令生成成功:

ceca1902-5b3d-11ed-a3b6-dac502259ad0.png

查看鏡像已經生成:

cee6a158-5b3d-11ed-a3b6-dac502259ad0.png

通過 docker run 命令啟動后查看容器的信息:

cefbabde-5b3d-11ed-a3b6-dac502259ad0.png

通過 curl -L http://172.17.0.2:8080/hello -w ' ' 也可以正常訪問。

cf14eca2-5b3d-11ed-a3b6-dac502259ad0.png

審核編輯:彭靜
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2974

    瀏覽量

    105135
  • 文件
    +關注

    關注

    1

    文章

    570

    瀏覽量

    24820
  • 鏡像
    +關注

    關注

    0

    文章

    170

    瀏覽量

    10801
收藏 人收藏

    評論

    相關推薦

    Visual_C++從入門實踐

    Visual_C++從入門實踐
    發表于 08-12 21:37

    FPGA與VHDL快速工程實踐入門到提高

    本帖最后由 eehome 于 2013-1-5 10:04 編輯 FPGA與VHDL快速工程實踐入門到提高
    發表于 08-14 13:14

    《CAN總線輕松入門實踐

    《CAN總線輕松入門實踐
    發表于 08-18 09:39

    機器人制作實踐入門教程

    [img][/img]STM32-機器人制作實踐入門教程
    發表于 08-16 09:59

    STM32-機器人制作實踐入門教程

    STM32-機器人制作實踐入門教程
    發表于 08-20 16:14

    基于實踐的LabVIEW零基礎入門視頻教程---·10 中級計算器制作(三)

    資料不在多,而在于精,資料太多,反而會迷失方向,學習最怕的就是打亂仗,選擇對的方向,比努力更重要,這也是本人的親身經歷!《基于實踐的LabVIEW零基礎入門視頻教程》方向明確,適合零基礎和初學者
    發表于 02-06 20:43

    PFGA與VHDL快速工程實踐入門到提高

    PFGA與VHDL快速工程實踐入門到提高,感興趣的小伙伴們可以瞧一瞧。
    發表于 11-10 14:20 ?12次下載

    C語言程序實踐--ACM入門

    C語言程序實踐--ACM入門(開關電源技術發展綜述)-該文檔為C語言程序實踐--ACM入門講解文檔,是一份不錯的參考資料,感興趣的可以下載看看,,,,,,,,,,,,,,,,,
    發表于 09-22 17:42 ?6次下載
    C語言程序<b class='flag-5'>實踐</b>--ACM<b class='flag-5'>入門</b>

    GitHub入門實踐

    GitHub入門實踐
    發表于 11-21 10:40 ?0次下載

    圖靈程序設計叢書《Python編程:從入門實踐

    圖靈程序設計叢書《Python編程:從入門實踐
    發表于 12-30 14:49 ?0次下載

    Apache Camel Quarkus將Camel組件移植為Quarkus擴展

    ./oschina_soft/camel-quarkus.zip
    發表于 05-16 09:34 ?1次下載
    Apache Camel <b class='flag-5'>Quarkus</b>將Camel組件移植為<b class='flag-5'>Quarkus</b>擴展

    weirblog-quarkus quarkus寫的博客系統

    ./oschina_soft/gitee-weirblog-quarkus.zip
    發表于 06-07 14:23 ?5次下載
    weirblog-<b class='flag-5'>quarkus</b> <b class='flag-5'>quarkus</b>寫的博客系統

    Java云原生微服務框架Quarkus入門實踐

    除了 Java,它還提供了 JavaScript、Ruby、Python 和其他一些流行語言的運行時。GraalVM 的多語言功能使得在一個應用程序中混合編程語言成為可能,同時消除了任何外語調用成本。目前最新版本為 22.3。
    的頭像 發表于 11-03 14:15 ?1228次閱讀

    迅為視頻教程 | RKNPU2 從入門實踐一套搞定!

    迅為視頻教程 | RKNPU2 從入門實踐一套搞定!
    的頭像 發表于 06-20 17:00 ?1071次閱讀
    迅為視頻教程 | RKNPU2 從<b class='flag-5'>入門</b>到<b class='flag-5'>實踐</b>一套搞定!

    Quarkus是SpringBoot的替代品嗎?

    SpringBoot框架不用多介紹,Java程序員想必都知道。相對來說熟悉Quarkus的人可能會少一些。Quarkus首頁放出的標語:超音速亞原子的Java(Supersonic Subatomic Java)。
    的頭像 發表于 11-10 10:01 ?767次閱讀
    <b class='flag-5'>Quarkus</b>是SpringBoot的替代品嗎?
    百家乐官网怎么才能包赢| 网上百家乐官网打牌| 百家乐园选蒙| 百家乐官网设备电子路| 澳门银河娱乐| 百家乐那里可以玩| 百家乐佣金计算| gt百家乐官网平台| bet365代理| 威尼斯人娱乐城极好| 合肥百家乐赌博游戏机| 聚宝盆百家乐游戏| 百家乐官网衬衣| 威尼斯人娱乐平台反| 大世界百家乐娱乐城| 网上百家乐官网内| 百家乐官网大转轮真人视讯| 百家乐官网为什么庄5| 澳门金沙| 大发888亚付宝充值| 百家乐高手和勒威| 红桃K百家乐官网的玩法技巧和规则 | 新澳门百家乐官网的玩法技巧和规则 | 新全讯网网站| 百家乐官网什么方法容易赢| 百家乐官网游戏机高手| 婺源县| 大发888娱乐城娱乐城| 百家乐赢的秘诀| 百家乐官网博彩吧| 金彩百家乐官网的玩法技巧和规则| 博彩百家乐官网心得| 百家乐官网闲庄概率| 方正县| 昌乐县| 陆丰市| 百家乐官网必赢法软件| 皇冠百家乐官网皇冠网| 蜀都棋牌下载| 威尼斯人娱乐网上百家乐的玩法技巧和规则| 百家乐出牌规|