日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

云原生时代高性能Java框架—Quarkus(一)

發(fā)布時(shí)間:2023/12/15 综合教程 66 生活家
生活随笔 收集整理的這篇文章主要介紹了 云原生时代高性能Java框架—Quarkus(一) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

——— Quarkus&GraalVM介紹、創(chuàng)建并啟動第一個(gè)項(xiàng)目


Quarkus系列博文

Quarkus&GraalVM介紹、創(chuàng)建并啟動第一個(gè)項(xiàng)目
構(gòu)建Quarkus本地鏡像、容器化部署Quarkus項(xiàng)目
...


Quarkus介紹

Quarkus 是一個(gè)為 Java 虛擬機(jī)(JVM)和原生編譯而設(shè)計(jì)的全堆棧 Kubernetes 原生 Java 框架,用于專門針對容器優(yōu)化 Java,并使其成為無服務(wù)器、云和 Kubernetes 環(huán)境的高效平臺。

Quarkus 可與常用 Java 標(biāo)準(zhǔn)、框架和庫協(xié)同工作,例如 Eclipse MicroProfile、Apache Kafka、RESTEasy(JAX-RS)、Hibernate ORM(JPA)、Spring、Infinispan、Camel 等。

Quarkus 的依賴注入解決方案基于 CDI(上下文和依賴注入),且包含一個(gè)擴(kuò)展框架來擴(kuò)展功能并將其配置、引導(dǎo)并集成到您的應(yīng)用中。添加擴(kuò)展就像添加依賴項(xiàng)一樣容易;或者,您可以使用 Quarkus 工具。

此外也是引人注目的一個(gè)特點(diǎn),它還向 GraalVM(一種通用虛擬機(jī),用于運(yùn)行以多種語言(包括 Java 和 JavaScript)編寫的應(yīng)用)提供正確信息,以便對應(yīng)用進(jìn)行原生編譯。

Rad Hat列出了一下清單來表明使用Quarkus的好處:檢查清單

Quarkus與傳統(tǒng)Java框架對比

Quarkus與傳統(tǒng)技術(shù)棧對比

來自官方的一張圖,展示了使用Quarkus框架開發(fā)項(xiàng)目和使用傳統(tǒng)框架開發(fā)的一些運(yùn)行時(shí)數(shù)據(jù)明細(xì)對比,可以看到Quarkus項(xiàng)目在JVM中運(yùn)行時(shí)所消耗的內(nèi)存和接口響應(yīng)能力要明顯好于傳統(tǒng)的Java技術(shù)棧。而將Quarkus編譯成本地可執(zhí)行文件(本地鏡像)之后,其優(yōu)勢可以說非常明顯了。

GraalVM簡介

GraalVM是一種高性能的虛擬機(jī),它可以顯著的提高程序的性能和運(yùn)行效率,非常適合微服務(wù)。其設(shè)計(jì)初衷是實(shí)現(xiàn)可以運(yùn)行不同語言(Java、JavaScript、基于LLVM的語言(例如C和C ++)以及其他動態(tài)語言)編寫的應(yīng)用程序。它消除了不同編程語言之間的隔閡,并實(shí)現(xiàn)了多語言共享運(yùn)行時(shí)的互操作性。它可以獨(dú)立運(yùn)行,也可以在OpenJDK,Node.js或Oracle數(shù)據(jù)庫的上下文中運(yùn)行。

對于Java應(yīng)用程序,GraalVM可以帶來很多有價(jià)值的好處:更快地運(yùn)行它們,通過腳本語言(JavaScript, R, Python...)提供可擴(kuò)展性或創(chuàng)建提前編譯的本機(jī)映像(native-image)。

更多關(guān)于GraalVM的信息可參考:此篇文章。

GraalVM安裝

本文我們使用SDKMAN來安裝GraalVM。SDKMAN是一款用于在大多數(shù)基于Unix的系統(tǒng)上管理多個(gè)軟件開發(fā)套件的并行版本的工具。它提供了一個(gè)方便的命令行界面(CLI)和API,用于安裝,切換,刪除和列出候選人。它以前被稱為Groovy enVironment Manager (GVM),受到了非常有用的RVM和rbenv工具的啟發(fā),該工具在Ruby社區(qū)中廣泛使用。

安裝SDKMAN

運(yùn)行如下命令進(jìn)行安裝:

$ curl -s "https://get.sdkman.io" | bash
$ source "$HOME/.sdkman/bin/sdkman-init.sh"	

運(yùn)行如下命令,驗(yàn)證是否已安裝ADKMAN:

$ sdk version

安裝GraalVM

運(yùn)行如下命令:

$ sdk list java

可以看到SDKMAN列出了所支持的所有Java發(fā)行版

我們找到GraalVM的發(fā)行版

截至編寫本文時(shí),GraalVM的最新版本為20.1.0.r11-grl,所以我們會安裝此版本。運(yùn)行如下命令安裝GraalVM:

$ sdk install java 20.1.0.r11-grl

至此,GraalVM安裝完畢!我們可以運(yùn)行如下命令來判斷GraalVM是否已安裝:

$ java -version

創(chuàng)建項(xiàng)目

我們有多種方式創(chuàng)建Quarkus項(xiàng)目

使用Intellij IDEA創(chuàng)建Quarkus項(xiàng)目

點(diǎn)擊菜單欄File>New>Project... 創(chuàng)建新項(xiàng)目

點(diǎn)擊Next,并填寫適當(dāng)?shù)男畔ⅲ琋ext>Next...,創(chuàng)建完畢。

使用Maven命令行創(chuàng)建Quarkus項(xiàng)目

運(yùn)行如下命令,創(chuàng)建Quarkus項(xiàng)目:

mvn io.quarkus:quarkus-maven-plugin:1.6.0.Final:create 
    -DprojectGroupId=org.acme 
    -DprojectArtifactId=getting-started 
    -DclassName="org.acme.getting.started.GreetingResource" 
    -Dpath="/hello"
cd getting-started

至此,創(chuàng)建項(xiàng)目完畢!

啟動項(xiàng)目

我們使用IDEA打開項(xiàng)目

Quarkus并沒有類似Spring Boot、Helidon之類框架一樣的啟動類,我們需要通過運(yùn)行Maven命令來啟動項(xiàng)目。

在IDEA控制臺運(yùn)行如下命令來啟動項(xiàng)目:

./mvnw compile quarkus:dev

啟動成功!

當(dāng)然每次運(yùn)行命令行會顯得不便,我們可以通過如下配置來配置項(xiàng)目快捷啟動:

點(diǎn)擊左上角"+"圖標(biāo)添加一個(gè)Maven配置如左邊欄,在右邊欄中的Command line中填入"compile quarkus:dev",點(diǎn)擊OK。

此時(shí)可以點(diǎn)下下圖所示圖標(biāo)來便捷啟動項(xiàng)目

運(yùn)行測試

打開項(xiàng)目中的測試類,看到如下代碼:

@QuarkusTest  //1
public class ExampleResourceTest {
    @Test
    public void testHelloEndpoint() {
        given()
            .when().get("/hello")
            .then()
            .statusCode(200) //2
            .body(is("hello"));
    }
}

通過使用@QuarkusTest注解運(yùn)行程序,可以指示JUnit在測試之前啟動應(yīng)用程序。
檢查HTTP響應(yīng)狀態(tài)代碼和內(nèi)容。

默認(rèn)情況下,測試將在端口8081上運(yùn)行,以免與正在運(yùn)行的應(yīng)用程序沖突。Quarkus自動將RestAssured配置為使用此端口。如果要測試其他路徑,則可以使用@TestHTTPResource注解將被測試的URL直接注入到測試類的字段中。該字段的類型可以是字符串,URL或URI。我們需要為該注解指定測試路徑的值。例如,如果我要測試映射到/myservlet的Servlet,只需在測試中添加以下內(nèi)容:

@QuarkusTest  
public class ExampleResourceTest {
    @TestHTTPResource("/myservlet")
    URL testUrl;

    @Test
    public void testHelloEndpoint() {
        given()
            .when().get(testUrl)
            .then()
            .statusCode(200) 
            .body(is("hello"));
    }
}

可以通過在項(xiàng)目配置文件中配置quarkus.http.test-port屬性控制測試端口。 Quarkus還創(chuàng)建了一個(gè)名為test.url的系統(tǒng)屬性,該屬性值將被設(shè)置成基礎(chǔ)測試URL(BasePath)。

總結(jié)

我們進(jìn)入了云原生、微服務(wù)的時(shí)代,我們告別了大型單體應(yīng)用的龐大和復(fù)雜,并且收獲了微服務(wù)帶來的極大的好處 。但是一些問題也開始接踵而至。隨著微小服務(wù)的增多,曾經(jīng)在單個(gè)應(yīng)用上發(fā)生的多余無用依賴、Java項(xiàng)目與生俱來的啟動過程緩慢、JIT優(yōu)化問題擴(kuò)散到了每個(gè)微服務(wù)上面。而且傳統(tǒng)的Java EE規(guī)范并沒有微服務(wù)的模式解決方案,問題很迫切需要解決。幸運(yùn)的事,隨著Quarkus、Helidon等等一些新型Java開發(fā)框架的出現(xiàn)緩解了這個(gè)局面(以及目前Spring生態(tài)也開始了對GraalVM的大力支持),他們使Java變得更加本地化,不管是項(xiàng)目的體量方面還是資源消耗和運(yùn)行效率方面都有顯著提升。

總結(jié)

以上是生活随笔為你收集整理的云原生时代高性能Java框架—Quarkus(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。