Oracle推出輕量級Java微服務框架Helidon
近日,Oracleofollow,noindex" target="_blank">推出 了一個新的開源框架Helidon ,該專案是一個用於建立基於微服務的應用程式的Java庫集合。和Payara Micro 、Thorntail (之前的WildFly Swarm )、OpenLiberty 、TomEE 等專案一樣,該專案也加入了MicroProfile家族。
Helidon最初被命名為J4C(Java for Cloud),其設計以簡單、快速為目標,它包括兩個版本:Helidon SE 和Helidon MP 。Helidon SE提供了建立微服務的三個核心API:Web伺服器、配置和安全,用於構建基於微服務的應用程式,不需要應用伺服器。Helidon MP支援用於構建基於微服務的應用程式的MicroProfile 1.1規範。
Web伺服器
受NodeJS和其他Java框架的啟發,Helidon的Web伺服器是一個非同步、反應性API,執行在Netty 之上。 WebServer 介面包括對配置、路由、錯誤處理以及構建度量和健康 端點的支援。
下面的示例程式碼演示瞭如何啟動一個簡單的Helidon Web伺服器,在一個隨機可用的埠上顯示“It works! ”:
// 在一個隨機可用的埠上啟動伺服器 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 載入和處理鍵/值格式的配置屬性。在預設情況下,配置屬性將從定義好的application.properties 或application.yaml 檔案中讀取,它們位於/src/main/resources 目錄下。
下面的示例程式碼基於前面的例子構建,它演示瞭如何使用Config ,通過讀取applications.yaml 檔案獲得指定的埠啟動Web伺服器。
// application.yaml server: port: 8080 host: 0.0.0.0 // 在application.yaml預定義的埠上啟動伺服器 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 為身份驗證、授權和審計提供支援。已經有許多用於Helidon應用程式的安全提供程式 實現。有三種方法可以將安全性內建到Helidon應用程式中:從構建器、通過配置或者是前兩者的結合。
下面的示例程式碼演示瞭如何構建Security 例項、使用Config 獲取使用者身份驗證(使用加密密碼)並顯示伺服器時間。
// 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的架構
下面的架構圖顯示了Helidon SE和Helidon MP的關係。
下圖說明了Helidon SE和Helidon MP所屬的微服務框架類別。
入門指南
Helidon提供了快速入門示例 來演示Helidon SE和Helidon MP之間的區別。
下面的Maven和Java命令將生成並打包Helidon SE示例,使用Helidon的Web伺服器建立一個REST服務。
$ 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建立一個REST服務。
$ 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
一旦伺服器開始執行,就可以執行下面的命令:
在GitHub 上可以找到整個Helidon專案。
Oracle的高階軟體開發經理Dmitry Kornilov 向infoQ介紹了這個新專案。
InfoQ:是什麼給了甲骨文開發這個新微服務框架的啟發?
Dmitry Kornilov:有關Helidon的工作已經開始一段時間了。當建立雲服務的微服務體系結構開始變得非常流行時,開發體驗也需要改變。Java EE是一種穩定的技術,但是它有很多遺留程式碼。我們沒有在Java EE上構建微服務,我們意識到,我們需要一個從頭開始設計的構建微服務的新框架。Helidon就是這樣出現的。
InfoQ:與OpenLiberty、Thorntail、Payara Micro和TomEE等其他MicroProfile實現相比,Helidon有什麼獨特之處?
Kornilov:Helidon不僅僅是一個MicroProfile實現。它有兩個版本:Helidon SE和Helidon MP。
Helidon SE構成了Helidon的核心。它是一組輕量級的庫,其中的庫可以單獨使用,但如果一起使用,就可以滿足開發人員建立微服務的基本需求:配置、安全和Web伺服器。它帶來了一種開發人員喜歡的更現代的反應性方法。我們總是盡力明確:不使用注入“魔法”,使Helidon SE應用程式易於除錯。沒有特殊的jar格式,沒有特殊的類載入器。你的應用程式只是一個普通的Java SE應用程式。這也意味著,它與所有IDE相容,不需要特殊的外掛。
Helidon MP是我們的MicroProfile實現,它以Helidon SE為基礎構建——它不是派生自某個應用伺服器。因此,沒有部署模型,沒有Java EE打包,沒有你不需要的額外的東西。
InfoQ:為什麼實現的是MicroProfile 1.1規範,而不是一個更新的版本?
Kornilov:Helidon的開發在一段時間之前就開始了,我們決定堅持使用當時最新的MicroProfile版本。我們正在不斷地改進Helidon,對新的MicroProfile版本的支援很快就會到來。
InfoQ:接下來,尤其是在Jakarta EE支援和MicroProfile規範較新版本的支援方面,Helidon將開展哪些工作?
Kornilov:我已經提到過,我們正致力於對MicroProfile較新版本的支援。當新的Jakarta EE 規範出現時,我們將參與它們的開發並在Helidon中支援它們。此外,我們計劃向Helidon新增Oracle Cloud整合特性、HTTP客戶端支援、專案啟動器Web應用,並不斷改進我們的示例和文件。