溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Oracle推出輕量級(jí)Java微服務(wù)框架Helidon的示例分析

發(fā)布時(shí)間:2021-10-12 10:36:06 來(lái)源:億速云 閱讀:119 作者:柒染 欄目:云計(jì)算

Oracle推出輕量級(jí)Java微服務(wù)框架Helidon的示例分析,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

近日,Oracle 推出 了一個(gè)新的開源框架 Helidon ,該項(xiàng)目是一個(gè)用于創(chuàng)建基于微服務(wù)的應(yīng)用程序的Java庫(kù)集合。和 Payara Micro 、 Thorntail (之前的 WildFly Swarm )、 OpenLiberty 、TomEE 等項(xiàng)目一樣,該項(xiàng)目也加入了MicroProfile家族。

Helidon最初被命名為J4C(Java for Cloud),其設(shè)計(jì)以簡(jiǎn)單、快速為目標(biāo),它包括兩個(gè)版本:Helidon SE 和 Helidon MP 。Helidon SE提供了創(chuàng)建微服務(wù)的三個(gè)核心API:Web服務(wù)器、配置和安全,用于構(gòu)建基于微服務(wù)的應(yīng)用程序,不需要應(yīng)用服務(wù)器。Helidon MP支持用于構(gòu)建基于微服務(wù)的應(yīng)用程序的MicroProfile 1.1規(guī)范。

Web服務(wù)器

受NodeJS和其他Java框架的啟發(fā),Helidon的Web服務(wù)器是一個(gè)異步、反應(yīng)性API,運(yùn)行在 Netty 之上。 WebServer 接口包括對(duì)配置、路由、錯(cuò)誤處理以及構(gòu)建 度量和健康 端點(diǎn)的支持。

下面的示例代碼演示了如何啟動(dòng)一個(gè)簡(jiǎn)單的Helidon Web服務(wù)器,在一個(gè)隨機(jī)可用的端口上顯示“ It works! ”:  

// 在一個(gè)隨機(jī)可用的端口上啟動(dòng)服務(wù)器
public void startWebServerUsingRandomPort() throws Exception {
    WebServer webServer = WebServer
           .create(Routing.builder()
                   .any((req,res) -> res.send("It works!" + "\n"))
                   .build())
           .start()
           .toCompletableFuture()
           .get(10,TimeUnit.SECONDS);
    System.out.println("Server started at: http://localhost:" + webServer.port() + "\n");
    webServer.shutdown().toCompletableFuture();
    }

配置

配置組件 Config 加載和處理鍵/值格式的配置屬性。在默認(rèn)情況下,配置屬性將從定義好的 application.properties 或 application.yaml 文件中讀取,它們位于 /src/main/resources 目錄下。

下面的示例代碼基于前面的例子構(gòu)建,它演示了如何使用 Config ,通過讀取 applications.yaml 文件獲得指定的端口啟動(dòng)Web服務(wù)器。  

// application.yaml
server:
 port: 8080
 host: 0.0.0.0

 
// 在application.yaml預(yù)定義的端口上啟動(dòng)服務(wù)器
public void startWebServerUsingDefinedPort() throws Exception {
    Config config = Config.create();
    ServerConfiguration serverConfig = ServerConfiguration.fromConfig(config.get("server"));
    WebServer webServer = WebServer
           .create(serverConfig,Routing.builder()
                   .any((req,res) -> res.send("It works!" + "\n"))
                   .build())
           .start()
           .toCompletableFuture()
           .get(10,TimeUnit.SECONDS);
    System.out.println("Server started at: http://localhost:" + webServer.port() + "\n");
    webServer.shutdown().toCompletableFuture();
    }

安全

類 Security 為身份驗(yàn)證、授權(quán)和審計(jì)提供支持。已經(jīng)有許多用于Helidon應(yīng)用程序的 安全提供程序 實(shí)現(xiàn)。有三種方法可以將安全性內(nèi)置到Helidon應(yīng)用程序中:從構(gòu)建器、通過配置或者是前兩者的結(jié)合。

下面的示例代碼演示了如何構(gòu)建 Security 實(shí)例、使用 Config 獲取用戶身份驗(yàn)證(使用加密密碼)并顯示服務(wù)器時(shí)間。

// application.yaml
http-basic-auth:
 users:
   login: "mpredli"
   password: "${CLEAR=somePassword}"
   roles: ["user","admin"]

 
Config config = Config.create();
Security security = Security.builder()
       .config(config)
       .addProvider(...)
       .build();
String user = config.get("http-basic-auth.users.login").asString();
String password = config.get("http-basic-auth.users.password").asString();
System.out.println("\n");
System.out.println("INFO: user = " + user);
System.out.println("INFO: password = " + password);
SecurityTime time = SecurityTime.builder().build();
time = security.getServerTime();
System.out.println("INFO: server time = " + time.toString());
System.out.println("\n");

GitHub

提供了更詳盡的安全示例。

Helidon的架構(gòu)

下面的架構(gòu)圖顯示了Helidon SE和Helidon MP的關(guān)系。

Oracle推出輕量級(jí)Java微服務(wù)框架Helidon的示例分析

下圖說(shuō)明了Helidon SE和Helidon MP所屬的微服務(wù)框架類別。

Oracle推出輕量級(jí)Java微服務(wù)框架Helidon的示例分析

入門指南

Helidon提供了 快速入門示例 來(lái)演示Helidon SE和Helidon MP之間的區(qū)別。

下面的Maven和Java命令將生成并打包Helidon SE示例,使用Helidon的Web服務(wù)器創(chuàng)建一個(gè)REST服務(wù)。

$ mvn archetype:generate -DinteractiveMode=false \
    -DarchetypeGroupId=io.helidon.archetypes \
    -DarchetypeArtifactId=helidon-quickstart-se \
    -DarchetypeVersion=0.10.1 \
    -DgroupId=io.helidon.examples \
    -DartifactId=quickstart-se \
    -Dpackage=io.helidon.examples.quickstart.se

 
$ cd quickstart-se
$ mvn package
$ java -jar target/quickstart-se.jar

下面的Maven和Java命令將生成并打包Helidon MP示例,使用MicroProfile的JAX-RS API創(chuàng)建一個(gè)REST服務(wù)。

$ mvn archetype:generate -DinteractiveMode=false \
    -DarchetypeGroupId=io.helidon.archetypes \
    -DarchetypeArtifactId=helidon-quickstart-mp \
    -DarchetypeVersion=0.10.1 \
    -DgroupId=io.helidon.examples \
    -DartifactId=quickstart-mp \
    -Dpackage=io.helidon.examples.quickstart.mp

 
$ cd quickstart-mp
$ mvn package
$ java -jar target/quickstart-mp.jar

一旦服務(wù)器開始運(yùn)行,就可以執(zhí)行下面的命令

在 GitHub 上可以找到整個(gè)Helidon項(xiàng)目。

Oracle的高級(jí)軟件開發(fā)經(jīng)理 Dmitry Kornilov 向infoQ介紹了這個(gè)新項(xiàng)目。

InfoQ:是什么給了甲骨文開發(fā)這個(gè)新微服務(wù)框架的啟發(fā)?

在此我向大家推薦一個(gè)架構(gòu)學(xué)習(xí)交流君羊。交流學(xué)習(xí)君羊:821169538  里面會(huì)分享一些資深架構(gòu)師錄制的視頻錄像:有Spring,MyBatis,Netty源碼分析,高并發(fā)、高性能、分布式、微服務(wù)架構(gòu)的原理,JVM性能優(yōu)化、分布式架構(gòu)等這些成為架構(gòu)師必備的知識(shí)體系。還能領(lǐng)取免費(fèi)的學(xué)習(xí)資源,目前受益良多。

Dmitry Kornilov:有關(guān)Helidon的工作已經(jīng)開始一段時(shí)間了。當(dāng)創(chuàng)建云服務(wù)的微服務(wù)體系結(jié)構(gòu)開始變得非常流行時(shí),開發(fā)體驗(yàn)也需要改變。Java EE是一種穩(wěn)定的技術(shù),但是它有很多遺留代碼。我們沒有在Java EE上構(gòu)建微服務(wù),我們意識(shí)到,我們需要一個(gè)從頭開始設(shè)計(jì)的構(gòu)建微服務(wù)的新框架。Helidon就是這樣出現(xiàn)的。

InfoQ:與OpenLiberty、Thorntail、Payara Micro和TomEE等其他MicroProfile實(shí)現(xiàn)相比,Helidon有什么獨(dú)特之處?

Kornilov:Helidon不僅僅是一個(gè)MicroProfile實(shí)現(xiàn)。它有兩個(gè)版本:Helidon SE和Helidon MP。

Helidon SE構(gòu)成了Helidon的核心。它是一組輕量級(jí)的庫(kù),其中的庫(kù)可以單獨(dú)使用,但如果一起使用,就可以滿足開發(fā)人員創(chuàng)建微服務(wù)的基本需求:配置、安全和Web服務(wù)器。它帶來(lái)了一種開發(fā)人員喜歡的更現(xiàn)代的反應(yīng)性方法。我們總是盡力明確:不使用注入“魔法”,使Helidon SE應(yīng)用程序易于調(diào)試。沒有特殊的jar格式,沒有特殊的類加載器。你的應(yīng)用程序只是一個(gè)普通的Java SE應(yīng)用程序。這也意味著,它與所有IDE兼容,不需要特殊的插件。

Helidon MP是我們的MicroProfile實(shí)現(xiàn),它以Helidon SE為基礎(chǔ)構(gòu)建——它不是派生自某個(gè)應(yīng)用服務(wù)器。因此,沒有部署模型,沒有Java EE打包,沒有你不需要的額外的東西。

InfoQ:為什么實(shí)現(xiàn)的是MicroProfile 1.1規(guī)范,而不是一個(gè)更新的版本?

Kornilov:Helidon的開發(fā)在一段時(shí)間之前就開始了,我們決定堅(jiān)持使用當(dāng)時(shí)最新的MicroProfile版本。我們正在不斷地改進(jìn)Helidon,對(duì)新的MicroProfile版本的支持很快就會(huì)到來(lái)。

InfoQ:接下來(lái),尤其是在Jakarta EE支持和MicroProfile規(guī)范較新版本的支持方面,Helidon將開展哪些工作?

Kornilov:我已經(jīng)提到過,我們正致力于對(duì)MicroProfile較新版本的支持。當(dāng)新的Jakarta EE 規(guī)范出現(xiàn)時(shí),我們將參與它們的開發(fā)并在Helidon中支持它們。此外,我們計(jì)劃向Helidon添加Oracle Cloud集成特性、HTTP客戶端支持、項(xiàng)目啟動(dòng)器Web應(yīng)用,并不斷改進(jìn)我們的示例和文檔。

看完上述內(nèi)容,你們掌握Oracle推出輕量級(jí)Java微服務(wù)框架Helidon的示例分析的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI