成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

云原生Java框架-Micronaut

譯文 精選
云計算 云原生
本文先介紹Micronaut的基本特點,然后從一個簡單的基于RESTful API的應用開始,將其重構為反應式非阻塞IO(reactive non-blocking IO,NIO),并介紹Micronaut如何支持基于微服務和無服務器架構的云原生開發。

譯者 | 陳峻

審校 | 孫淑娟

長期以來,Spring框架一直主導著后端Java的開發,但是以Micronaut、Quarkus、以及Dropwizard為代表的新型云原生Java框架正在不斷流行。其中,Micronaut是一種令人耳目一新的替代方案。它是由構建Grails(譯者注:Grails是一套用于快速Web應用開發的開源框架)的團隊,專為現代化架構而設計開發的。

本文先介紹Micronaut的基本特點,然后從一個簡單的基于RESTful API的應用開始,將其重構為反應式非阻塞IO(reactive non-blocking IO,NIO),并介紹Micronaut如何支持基于微服務和無服務器架構的云原生開發。

Micronaut的特征

Micronaut提供了從Spring和Grails等傳統框架處繼承來的大量優勢,其中的一項被稱為“原生云原生(natively cloud native)”,即:為云環境從頭開始構建。它的云原生能力包括:環境檢測、服務發現、以及分布式跟蹤等。

同時,Micronaut提供了一個全新的控制反轉(inversion-of-control,IoC)容器。該容器能夠使用提前(ahead-of-time,AoT)編譯,來加快啟動速度。此處的AoT是指,啟動時間不會隨著代碼庫的增多而增加。這對于無服務器和基于容器的部署來說,是尤其重要的。畢竟,在這些部署中,節點通常會按需進行關閉和啟動。

作為一個多語言JVM框架,Micronaut目前支持Java、Groovy和Kotlin,并且即將支持Scala。

此外,Micronaut也支持響應式編程。開發人員可以在該框架內,使用ReactiveX或Reactor。其實,從 2021年7月發布的Micronaut 3開始,Reactor已被推薦使用了。值得注意的是,其新版本并沒有將響應式庫作為傳遞式依賴項。

1.開始使用Micronaut  

我們可以通過SDKMan,將Micronaut輕松地安裝在包括Linux和macOS在內的任何基于Unix的系統上。如果您使用的是Windows,那么請下載Micronaut的二進制文件,并將其添加到合適的路徑中。

在安裝完成后,您可以在命令行中看到mn工具的提示符。也就是說,通過打開一個Shell,并定位到合適的位置,您便可以鍵入:mn create-app micronaut-idg --build maven。

Micronaut通過包裝器(wrapper)來支持Gradle和Maven。這免去了自行安裝和構建工具的繁瑣。注意,如果您喜歡使用Gradle的話,請不要在上述命令中使用--build maven。  

如果您使用mvnw mn:run命令來運行服務器,并在瀏覽器中輸入http://localhost:8080/,那么您可能會看到一個默認為“未找到(not found)”的JSON響應。對此,讓我們來研究一下該示例項目的布局。它是一個標準的Maven項目。其main類位于src/main/java/micronaut/idg/Application.java中。請注意,該main類是以一個嵌入式服務器運行的。當您更改代碼時,Micronaut開發服務器會自動更新正在運行的應用程序。

2.添加一個Micronaut控制器  

就像在Spring的MVC 中一樣,您可以添加各種控制器類(controller class),將URL映射到代碼處理器(handler)上。例如,您可以在src/main/java/micronaut/idg/controller/SimpleController上添加一個類。如下面的清單1所示,我們使用該控制器來創建一個文本響應。

清單1. 使用Micronaut控制器

package micronaut.idg.controller; 

import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;

@Controller("/simple"
public class SimpleController {

@Get(produces = MediaType.TEXT_PLAIN
public String index({
return "A Simple Endpoint";
}
}

如下面的清單2所示,它能夠容易地返回一個JSON格式的響應。

清單2. JSON格式的響應

package micronaut.idg.controller; 

import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;

import java.util.Map;
import java.util.HashMap;

@Controller("/simple"
public class SimpleController {

@Get(produces = MediaType.APPLICATION_JSON
public Map index({
Map msg = new HashMap(;
msg.put("message", "A simple message";
return msg;

}
}

清單2演示了Micronaut針對@Get注解的produces參數所進行的智能處理。在這種情況下,它會發送我們已設置好的JSON格式的響應。

3.添加Micronaut服務層  

由于能夠預運行,因此Micronaut的IoC實現在底層是唯一的。當然,它仍然屬于CDI(Contexts and Dependency Injection,上下文和依賴注入)規范的完整實現。這就意味著您可以使用從Spring中(如@Inject)獲悉的所有類似DI的注釋。

在下面的清單3中,我們將連接一個服務層的bean,以提供消息。在實際的應用程序中,這個類可以通過一個數據訪問bean,來調用數據存儲或其他遠程的API。例如,我們可以創建一個src/main/java/micronaut/idg/service文件夾,并添加如清單3所示的兩個文件——一個接口(Simple)、及其實現(SimpleService)。

清單3. 創建一個簡單的服務層bean

// Simple.java 
package micronaut.idg.service;

public interface Simple {
public String getMessage(;

}

// SimpleService.java
package micronaut.idg.service;

import jakarta.inject.Singleton;

@Singleton
public class SimpleService implements Simple {
public String getMessage({
return "A simple service message";

}
}

現在,您可以通過將服務注入在清單1中創建的SimpleController服務,來使用新的服務層。下面的清單4展示了Constructor的注入。

清單4. 將服務bean注入控制器

@Controller("/simple"
public class SimpleController {

@Inject
private final Simple simpleService;

public SimpleController(@Named("simpleService") Simple simple) { //(1)
thi.simpleService = simple;

}

@Get(produces = MediaType.APPLICATION_JSON
public Map index({
Map msg = new HashMap(;
msg.put("message", simpleService.getMessage());
return msg;
}
}

關鍵性任務是在注釋1處完成的,其中服務bean是按照名稱完成了連接。至此,如果您去訪問http://localhost:8080/simple,就能夠看到來自服務層的響應:{"message":"A simple service message"}。  

4.使用Micronaut的反應式NIO  

接下來,讓我們來討論Micronaut與Reactor的結合使用。在這種情況下,我們將重構當前的應用程序,以使用Reactor和非阻塞IO。該應用程序雖然仍執行相同的任務,但是在后臺會使用非阻塞棧——Reactor和Netty。

如前文所述,Micronaut 3默認是不包含響應式庫的,因此,正如下面的清單5所示,我們首先需要將Reactor核心添加到Maven的POM處。

清單5. 將Reactor添加到pom.xml

<dependency> 
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>
<version>3.4.11</version>
</dependency>

如下面的清單6所示,您可以對返回的SimpleController進行修改。

清單6. 使控制器非阻塞

import reactor.core.publisher.Mono; 

//...

@Get
public Mono<map> index({
Map msg = new HashMap(;
msg.put("message", simpleService.getMessage());
return Mono.just(msg);
}
}

如您所見,我們只是使用Reactor的Mono類,包裝了相同的返回類型(即,string/strin的映射)。

在反應方式中,由于使用遠程服務也能夠得到類似的支持,因此您完全可以在非阻塞IO上運行應用程序。

5.使用Micronaut的CLI創建新的組件  

您也可以使用Micronaut的命令行工具(CLI),來stub out各種組件。例如,如果你想添加一個新的控制器,那么可以使用命令:mn add-controller MyController。如下面的清單7所示,它將輸出一個新的控制器、及其對應的測試。  

清單7. 使用Micronaut命令行創建一個新的控制器

mn create-controller MyController 
| Rendered controller to src/main/java/micronaut/idg/MyControllerController.java
| Rendered test to src/test/java/micronaut/idg/MyControllerControllerTest.java

6.使用Micronaut進行云原生開發  

如前文所述,Micronaut是為云原生微服務和無服務器的開發而構建的。Micronaut支持一種所謂聯合(federation)的云原生概念。此處的聯合是指,幾個較小的應用程序共享相同的設置,并且可以實現串聯部署。這聽起來像極了微服務架構,其目的就是為了使得微服務的開發更簡單,并能夠保持可管理性。有關聯合服務的更多信息,請參閱Micronaut的相關文檔。

此外,Micronaut還可以輕松地針對云環境實現部署。如下面的清單8 所示,您可以部署Google Cloud Platform(GCP)的Docker存儲庫。  

清單8. 使用GCP的Docker存儲庫部署Micronaut應用

./mvnw deploy \ 
-Dpackaging=docker \
-Djib.to.image=gcr.io/my-org/my-project:latest

在這種情況下,該項目會被作為Docker鏡像,推送到GCP的Docker存儲庫處。請注意,我們在此用到了Jib Maven插件。它能夠將Java項目轉換為Docker鏡像,而無需您創建實際的Docker文件。  

此外,我們已經將Docker標識為帶有-Dpackaging=docker的打包工具,一旦打包完成,您便可以像下面的清單9那樣,使用GCP命令行工具,去部署自己的項目。  

清單9. 從命令行處運行Docker鏡像

gcloud run deploy \ 
--image=gcr.io/my-org/my-project:latest \
--platform managed \
--allow-unauthenticated

Micronaut支持的另一種云原生功能是:跟蹤。例如,Micronaut通過各種注釋,使得啟用Jaeger的分布式跟蹤,變得相當簡單。  

如下面的清單10所示,我們可以將Jaeger配置為跟蹤微服務應用程序application.xml文件中的所有請求。

清單10. application.xml中的Jaeger配置

tracing: 
jaeger:
enabled: true
sampler:
probability: 1

7.小結  

Micronaut提供了一系列非常適合云原生和微服務開發的功能。同時,該框架更適合讓傳統的、基于API的開發,變得簡單明了。此外,它還可以與反應式NIO的Reactor和Netty進行很好的集成。

原文鏈接:https://www.infoworld.com/article/3658968/intro-to-micronaut-a-cloud-native-java-framework.html

譯者介紹

陳峻 (Julian Chen),51CTO社區編輯,具有十多年的IT項目實施經驗,善于對內外部資源與風險實施管控,專注傳播網絡與信息安全知識與經驗;持續以博文、專題和譯文等形式,分享前沿技術與新知;經常以線上、線下等方式,開展信息安全類培訓與授課。

責任編輯:武曉燕 來源: 51CTO技術棧
相關推薦

2022-07-05 08:00:00

云原生Java開發

2021-06-09 05:44:45

云原生 CICD

2021-11-26 08:14:05

云原生CICD

2022-02-15 09:00:00

Java開發框架

2020-07-07 14:09:16

云原生JavaGolang

2020-07-16 08:05:15

JavaGo

2022-04-25 12:39:57

云原生云計算

2023-11-15 20:08:15

云原生云計算

2023-09-12 10:27:41

2021-10-29 10:12:34

云原生勒索軟件網絡攻擊

2018-09-13 10:06:45

云原生容器Kubernetes

2024-03-19 08:15:09

云原生云計算容器

2022-10-31 14:07:59

騰訊云云原生PaaS

2018-09-20 20:46:51

云原生CNBPS靈雀云

2023-05-15 07:33:06

云原生自身業務云廠商

2019-09-20 13:37:50

Java云原生Docker

2021-02-05 08:42:21

云原生系統方式

2023-09-03 16:41:07

2017-03-07 10:00:01

定義實踐DevOps
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人午夜影院 | 黄色成人亚洲 | 一级大片 | 欧美性大战久久久久久久蜜臀 | 男人的天堂一级片 | 亚洲日日| 亚洲欧洲综合av | 中文字幕在线第二页 | 我要看黄色录像一级片 | 粉嫩国产精品一区二区在线观看 | 午夜精品在线 | 中文字幕11页| 日韩久久久久久 | 在线成人免费视频 | 成人精品在线观看 | 一级a性色生活片久久毛片 一级特黄a大片 | 在线中文字幕国产 | 免费国产一区二区 | 精品一区二区三区不卡 | 色婷婷综合久久久中字幕精品久久 | av免费网址 | 天天拍天天草 | 一级毛片中国 | 亚洲一区| 久热久草 | 亚洲一区二区三区四区五区午夜 | 日韩欧美综合在线视频 | 久久精品国产一区 | 久草免费在线视频 | 成人午夜视频在线观看 | 成人欧美一区二区三区黑人孕妇 | a视频在线播放 | 久久久国产一区二区三区四区小说 | 成人免费淫片aa视频免费 | aaa精品 | 久久97精品 | 九九久久精品 | 黑人精品欧美一区二区蜜桃 | 老外黄色一级片 | 久久天天躁狠狠躁夜夜躁2014 | 国产精品视频久久久 |