精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Quarkus入門實(shí)踐

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

1. 概述

1.1 定義

1.2 GraalVM 簡介

1.3 為何使用

1.4 特性

1.5 官方性能數(shù)據(jù)

2. 實(shí)戰(zhàn)

2.1 安裝 GraalVM

2.2 創(chuàng)建 Quarkus 工程

2.3 IDEA 導(dǎo)入項(xiàng)目

2.4 IDEA 運(yùn)行和調(diào)試

2.5 打包成普通的 Jar

2.6 打包成依賴 GraalVM 二進(jìn)制文件

2.7 打包成不依賴 GraalVM 的二進(jìn)制文件

2.8 制作 docker 鏡像

1. 概述

1.1 定義

Quarkus定位要做超聲速、亞原子的Java框架,使用最好標(biāo)準(zhǔn)為OpenJDK HotSpot和GraalVM量身定制的Kubernetes Native Java棧;從一開始就是針對Kubernetes設(shè)計(jì)的云原生優(yōu)化Java應(yīng)用開發(fā)框架;兼容主流的框架開發(fā)模式如Jpa、Netty、Undertow、Hibernate、JWT、Spring。最新版本為2.13.3。

Quarkus 官網(wǎng):https://quarkus.io/

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

1.2 GraalVM 簡介

GraalVM 是 Oracle 開發(fā)的高性能的多語言運(yùn)行時(shí) JDK,旨在提高 Java 應(yīng)用程序的性能,同時(shí)消耗更少的資源。

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

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

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

GraalVM 可以創(chuàng)建原生可執(zhí)行文件;

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

GraalVM 生成的原生可執(zhí)行文件與底層平臺(tái)相關(guān),不能在當(dāng)前平臺(tái)之外的其他平臺(tái)上運(yùn)行。但對云原生應(yīng)用來說,這并不是一個(gè)問題。云原生應(yīng)用的設(shè)計(jì)目標(biāo)是在容器中運(yùn)行,所運(yùn)行的底層平臺(tái)是固定的。

1.3 為何使用

使用 Spring Boot 的快速開發(fā)企業(yè)級(jí)應(yīng)用的微服務(wù)啟動(dòng)慢,從一個(gè)應(yīng)用從啟動(dòng)到服務(wù)可用,一般是數(shù)秒。在對 CPU 核數(shù)和內(nèi)存嚴(yán)格限制的情況下,花數(shù)十秒啟動(dòng)的情況也屢見不鮮。這樣的問題無法適應(yīng)需要快速重啟或快速擴(kuò)容的場景。不僅如此,內(nèi)存消耗也很大。如果限制在 1G 時(shí) FullGC 頻率變大,且經(jīng)常觸發(fā) OMM 后 Kill 導(dǎo)致 pod 重啟,并且啟動(dòng)時(shí)間也會(huì)變長。

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

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

對于云原生應(yīng)用來說,平臺(tái)無關(guān)性變得無關(guān)緊要。云原生應(yīng)用都是以容器化的形式運(yùn)行的,所運(yùn)行的底層平臺(tái)是固定的;

云原生應(yīng)用對啟動(dòng)速度的要求比較高。當(dāng)需要進(jìn)行水平擴(kuò)展時(shí),要求這些新的實(shí)例必須在足夠短的時(shí)間內(nèi)完成啟動(dòng),從而盡快的處理新增的請求;

云原生應(yīng)用要求在運(yùn)行時(shí)占用盡可能少的資源。盡可能的減少單個(gè)實(shí)例占用的資源,就意味著可以用同樣的成本,支持更多的訪問請求;

云原生應(yīng)用要求更小的打包體積。云原生應(yīng)用以容器鏡像的形式打包。應(yīng)用鏡像的尺寸越大,所需要的存儲(chǔ)空間也會(huì)越大,推送和拉取鏡像所耗費(fèi)的時(shí)間也會(huì)更長。

Quarkus具備企業(yè)級(jí)應(yīng)用開發(fā)能力。

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

1.4 特性

容器優(yōu)先

構(gòu)建期即生成云原生鏡像執(zhí)行文件。

Quarkus 為 GraalVM 和 HotSpot 定制應(yīng)用程序。快速啟動(dòng)、低內(nèi)存消耗、體積小,在 Kubernetes 這樣的容器編排平臺(tái)上提供了近乎實(shí)時(shí)的擴(kuò)展和高密度的內(nèi)存利用率。這就是使用了編譯時(shí)引導(dǎo)的技術(shù)。

支持 Graal/SubstrateVM

構(gòu)建時(shí)元數(shù)據(jù)處理

盡量減少 JNI 調(diào)用

減少反射的使用

本機(jī)映像預(yù)啟動(dòng)

Kubernete 原生

構(gòu)建期即生成云原生鏡像執(zhí)行文件,可以與 Docker 和 Kubernetes 輕松集成,Quarkus 和 Kubernetes 的組合可以伸縮、快速創(chuàng)建輕量級(jí)的應(yīng)用程序。Quarkus 通過工具、預(yù)構(gòu)建的集成、應(yīng)用程序服務(wù)等顯著提高了開發(fā)人員的工作效率。

命令式和響應(yīng)式

在設(shè)計(jì)上 Quarkus 能夠在開發(fā)應(yīng)用時(shí)無縫地結(jié)合熟悉的命令式代碼和非阻塞、響應(yīng)式樣式。這對于習(xí)慣使用命令式模型而不想切換風(fēng)格的 Java 開發(fā)人員以及使用云原生/響應(yīng)式方法的開發(fā)人員都非常有用。

社區(qū)和標(biāo)準(zhǔn)

擁抱 JavaEE 標(biāo)準(zhǔn),使用 JavaEE 官方 RESTful、CDI 等標(biāo)準(zhǔn)接口。Quarkus 提供了一個(gè)內(nèi)聚的、輕量的全棧框架,包含超過 50 個(gè)使用的最佳類庫。

開發(fā)者友好

學(xué)習(xí)成本也低,具有統(tǒng)一的配置和簡單的本地可執(zhí)行文件生成,零配置,實(shí)時(shí)重新加載,80% 的常用標(biāo)準(zhǔn)和 20% 靈活應(yīng)用。

1.5 官方性能數(shù)據(jù)

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

從圖中可以看出,使用 Quarkus 和 GraalVM 的簡單的 REST 應(yīng)用的啟動(dòng)時(shí)間僅為 16 毫秒,占用內(nèi)存僅 12MB。如果使用傳統(tǒng)的基于 Java 虛擬機(jī)實(shí)現(xiàn),應(yīng)用的啟動(dòng)時(shí)間需要 4.3 秒,占用內(nèi)存為 136MB。

基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

項(xiàng)目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro

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

2. 實(shí)戰(zhàn)

入門示例項(xiàng)目步驟:

安裝 GraalVM

創(chuàng)建 Quarkus工程

IDEA 導(dǎo)入項(xiàng)目

IDEA 編碼運(yùn)行和調(diào)試

打包成普通的 jar

打包成依賴 GraalVM 的二進(jìn)制文件

打包成不依賴 GraalVM 的二進(jìn)制文件

制作成 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實(shí)現(xiàn)的后臺(tái)管理系統(tǒng)+用戶小程序,支持RBAC動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能
>
>*項(xiàng)目地址:
>*視頻教程

#windows
PATH環(huán)境變量增加路徑:D:ProgramFilesJavagraalvm-ce-java11-22.2.0in
JAVA_HOME配置環(huán)境變量: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 創(chuàng)建 Quarkus 工程

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

IDEA 支持創(chuàng)建 Quarkus 項(xiàng)目

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

maven 命令支持創(chuàng)建(使用的是 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/ 頁面在線創(chuàng)建,這種方法直觀且簡單(不用記命令),推薦使用。添加自己的 maven 配置,然后下載網(wǎng)站生成的工程包。

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

我們先以第三種為例說明,通過在線網(wǎng)頁生成 quarkus-web-demo.zip。解壓后用 tree 命令看看項(xiàng)目結(jié)構(gòu),是一個(gè)標(biāo)準(zhǔn)的 maven 工程,多了個(gè) docker 目錄,里面有幾個(gè) Dockerfile 文件相關(guān)的問題。

目錄結(jié)構(gòu)如下:

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

2.3 IDEA 導(dǎo)入項(xiàng)目

IDEA 導(dǎo)入上面的 Maven項(xiàng)目,幾分鐘下載依賴后項(xiàng)目已成功導(dǎo)入。可以看到 Quarkus 項(xiàng)目的 pom 文件核心依賴為 quarkus-bom。Quarkus 官方認(rèn)為傳統(tǒng)的接口就是一個(gè)個(gè)對外方法的資源,所以在 Quarkus 里面是以 Resource 資源的概念來進(jìn)行的。

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

2.4 IDEA 運(yùn)行和調(diào)試

在 IDEA 要運(yùn)行和調(diào)試 Quarkus 的項(xiàng)目,首先得在項(xiàng)目添加 SDK,并將路徑指向剛才解壓的目錄。

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

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

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

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

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

訪問本地 http://localhost:8080/hello 后可以看到正確的返回結(jié)果,同樣也可以直接點(diǎn)擊調(diào)試按鈕進(jìn)入調(diào)試模式。

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

2.5 打包成普通的 Jar

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

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

可以直接通過 java -jar 運(yùn)行 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 秒的時(shí)間就啟動(dòng)完畢了。

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

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

2.6 打包成依賴 GraalVM 二進(jìn)制文件

此方法打包的二進(jìn)制文件仍需要依賴 GraalVM,但由于代碼已經(jīng)做了靜態(tài)編譯處理,所以執(zhí)行效率有大幅提升,比較適合容器化啟動(dòng)。

先安裝 VS C++依賴,下載 Visual Studio Installer,需要取消中文并選擇英文。然后使用 powershell 進(jìn)入到項(xiàng)目根目錄,執(zhí)行 mvn package -Pnative 命令后報(bào)錯(cuò):

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

根據(jù)提示安裝 native-image 執(zhí)行安裝命令和確認(rèn)是否配置了 GRAALVM_HOME、JAVA_HOME 環(huán)境變量

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

直接運(yùn)行生成的可執(zhí)行文件 quarkus-web-demo-1.0.0-SNAPSHOT-runner,確實(shí)飛快,啟動(dòng)時(shí)間只要 0.033s,訪問hello也正常顯示。

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

2.7 打包成不依賴 GraalVM 的二進(jìn)制文件

需要本機(jī)先裝有 docker 的環(huán)境,這里用的是 docker desktop。打包有多種方法,可以直接 maven 參數(shù)構(gòu)建,也可以在 appllications.properties 文件中增加構(gòu)建參數(shù)。

quarkus.native.container-build=true
quarkus.native.native-image-xmx=4096m
ce9cb8ea-5b3d-11ed-a3b6-dac502259ad0.png
#終端命令中執(zhí)行打包
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.

執(zhí)行 docker 命令生成成功:

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

查看鏡像已經(jīng)生成:

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

通過 docker run 命令啟動(dòng)后查看容器的信息:

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

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

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

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2943

    瀏覽量

    104096
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    551

    瀏覽量

    24559
  • 鏡像
    +關(guān)注

    關(guān)注

    0

    文章

    158

    瀏覽量

    10651
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Visual_C++從入門實(shí)踐

    Visual_C++從入門實(shí)踐
    發(fā)表于 08-12 21:37

    FPGA與VHDL快速工程實(shí)踐入門到提高

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

    《CAN總線輕松入門實(shí)踐

    《CAN總線輕松入門實(shí)踐
    發(fā)表于 08-18 09:39

    機(jī)器人制作實(shí)踐入門教程

    [img][/img]STM32-機(jī)器人制作實(shí)踐入門教程
    發(fā)表于 08-16 09:59

    STM32-機(jī)器人制作實(shí)踐入門教程

    STM32-機(jī)器人制作實(shí)踐入門教程
    發(fā)表于 08-20 16:14

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

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

    PFGA與VHDL快速工程實(shí)踐入門到提高

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

    C語言程序實(shí)踐--ACM入門

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

    GitHub入門實(shí)踐

    GitHub入門實(shí)踐
    發(fā)表于 11-21 10:40 ?0次下載

    圖靈程序設(shè)計(jì)叢書《Python編程:從入門實(shí)踐

    圖靈程序設(shè)計(jì)叢書《Python編程:從入門實(shí)踐
    發(fā)表于 12-30 14:49 ?0次下載

    Apache Camel Quarkus將Camel組件移植為Quarkus擴(kuò)展

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

    weirblog-quarkus quarkus寫的博客系統(tǒng)

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

    Java云原生微服務(wù)框架Quarkus入門實(shí)踐

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

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

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

    Quarkus是SpringBoot的替代品嗎?

    SpringBoot框架不用多介紹,Java程序員想必都知道。相對來說熟悉Quarkus的人可能會(huì)少一些。Quarkus首頁放出的標(biāo)語:超音速亞原子的Java(Supersonic Subatomic Java)。
    的頭像 發(fā)表于 11-10 10:01 ?590次閱讀
    <b class='flag-5'>Quarkus</b>是SpringBoot的替代品嗎?