クラウドネイティブ Java フレームワーク - Micronaut

クラウドネイティブ Java フレームワーク - Micronaut

翻訳者 |チェン・ジュン

校正:孫淑娟

長い間、バックエンド Java の開発は Spring フレームワークが主流でしたが、Micronaut、Quarkus、Dropwizard に代表される新しいクラウドネイティブ Java フレームワークの人気が高まっています。その中でも、Micronaut は新鮮な選択肢です。これは、Grails を構築したチームによって、最新のアーキテクチャ向けに設計および開発されました (翻訳者注: Grails は、迅速な Web アプリケーション開発のためのオープン ソース フレームワークです)。

この記事では、まず Micronaut の基本機能を紹介し、次にシンプルな RESTful API ベースのアプリケーションから始めて、それをリアクティブ ノンブロッキング IO (NIO) にリファクタリングし、Micronaut がマイクロサービスとサーバーレス アーキテクチャに基づくクラウド ネイティブ開発をどのようにサポートするかを紹介します。

Micronautの特徴

Micronaut は、Spring や Grails などの従来のフレームワークから継承された多くの利点を提供します。その 1 つは「ネイティブ クラウド ネイティブ」と呼ばれ、クラウド環境向けにゼロから構築されています。クラウド ネイティブ機能には、環境検出、サービス検出、分散トレースなどが含まれます。

同時に、Micronaut はまったく新しい制御の反転 (IoC) コンテナーを提供します。コンテナーは事前 (AoT) コンパイルを使用して起動を高速化できます。ここでの AoT とは、コード ベースが増加しても起動時間が増加しないことを意味します。これは、サーバーレスおよびコンテナベースのデプロイメントにとって特に重要です。結局のところ、これらのデプロイメントでは、ノードは通常、要求に応じてシャットダウンおよび起動されます。

多言語 JVM フレームワークである Micronaut は現在、Java、Groovy、Kotlin をサポートしており、まもなく Scala もサポートする予定です。

さらに、Micronaut はレスポンシブプログラミングもサポートしています。開発者はフレームワーク内で ReactiveX または Reactor を使用できます。実際、Reactor は 2021 年 7 月にリリースされた Micronaut 3 以降、使用が推奨されています。新しいバージョンには、Responsive ライブラリが推移的な依存関係として含まれていないことに注意してください。

1. Micronaut を使い始める

Micronaut は、SDKMan を使用して、Linux や macOS を含むあらゆる Unix ベースのシステムに簡単にインストールできます。 Windows を使用している場合は、Micronaut バイナリをダウンロードし、適切なパスに追加します。

インストールが完了すると、コマンド ラインに mn ツール プロンプトが表示されます。つまり、シェルを開いて適切な場所に移動し、次のように入力できます: mn create-app micronaut-idg --build maven。

Micronaut はラッパーを通じて Gradle と Maven をサポートします。これにより、ツールを自分でインストールして構築する手間が省けます。 Gradle を使用する場合は、上記のコマンドで --build maven を使用しないでください。

mvnw mn:run コマンドを使用してサーバーを実行し、ブラウザで http://localhost:8080/ を指定すると、デフォルトで「見つかりません」という JSON 応答が表示される可能性があります。この目的のために、サンプル プロジェクトのレイアウトを調べてみましょう。これは標準の Maven プロジェクトです。メインクラスは src/main/java/micronaut/idg/Application.java にあります。メイン クラスは組み込みサーバーとして実行されることに注意してください。 Micronaut 開発サーバーは、コードに変更を加えると、実行中のアプリケーションを自動的に更新します。

2. Micronaut コントローラーを追加する

Spring の MVC と同様に、さまざまなコントローラー クラスを追加して、URL をコード ハンドラーにマップできます。たとえば、src/main/java/micronaut/idg/controller/SimpleController にクラスを追加できます。以下のリスト 1 に示すように、このコントローラーを使用してテキスト応答を作成します。

リスト1. Micronautコントローラの使用

パッケージ micronaut .idg .controller ;

io .micronaut .http .MediaTypeをインポートします
io .micronaut .http .annotation .Controllerをインポートします
io .micronaut .http .annotation .Getをインポートします

@Controller ( "/シンプル" )
パブリッククラスSimpleController {

@Get (生成= MediaType .TEXT_PLAIN )
パブリック文字列インデックス{
「シンプルなエンドポイント」を返します
}
}

以下のリスト 2 に示すように、JSON 形式の応答を簡単に返すことができます。

リスト2. JSON形式のレスポンス

パッケージ micronaut .idg .controller ;

io .micronaut .http .MediaTypeをインポートします
io .micronaut .http .annotation .Controllerをインポートします
io .micronaut .http .annotation .Getをインポートします

java .util .Mapをインポートします
java .util .HashMapをインポートします

@Controller ( "/シンプル" )
パブリッククラスSimpleController {

@Get (生成= MediaType .APPLICATION_JSON )
パブリックマップインデックス{
マップ msg =新しい HashMap ( ) ;
msg .put ( "メッセージ" , "簡単なメッセージ" ) ;
メッセージを返します

}
}

リスト 2 は、Micronaut が @Get アノテーションの produces パラメータに対して実行するスマートな処理を示しています。この場合、設定した JSON 応答が送信されます。

3. Micronautサービスレイヤーを追加する

事前に実行できるため、Micronaut の IoC 実装は内部的にユニークです。もちろん、これは依然として CDI (Contexts and Dependency Injection) 仕様の完全な実装に属します。つまり、Spring で知られている DI のようなアノテーション (@Inject など) をすべて使用できるということです。

以下のリスト 3 では、メッセージを提供するためにサービス層 Bean を接続します。実際のアプリケーションでは、このクラスはデータ アクセス Bean を介してデータ ストアまたはその他のリモート API を呼び出すことができます。たとえば、src/main/java/micronaut/idg/service フォルダーを作成し、リスト 3 に示す 2 つのファイル (インターフェース (Simple) とその実装 (SimpleService)) を追加できます。

リスト3. シンプルなサービス層Beanの作成

 //シンプルな.java
パッケージ micronaut .idg .service ;

パブリックインターフェースシンプル{
パブリック文字列 getMessage ( ) ;

}

//シンプルサービス.java
パッケージ micronaut .idg .service ;

jakarta .inject .Singletonをインポートします

@シングルトン
パブリッククラスSimpleServiceはSimpleを実装します{
パブリック文字列getMessage ( ) {
「シンプルなサービスメッセージ」を返します

}
}

リスト 1 で作成した SimpleController サービスにサービスを注入することで、新しいサービス レイヤーを使用できるようになりました。以下のリスト 4 は、コンストラクター注入を示しています。

リスト4. サービスBeanをコントローラに注入する

 @Controller ( "/シンプル" )
パブリッククラスSimpleController {

@注入
プライベート最終シンプル simpleService ;

パブリック SimpleController ( @Named ( "simpleService" ) シンプル simple) { // (1)
.simpleServiceは simple です

}

@Get (生成= MediaType .APPLICATION_JSON )
パブリックマップインデックス{
マップ msg =新しい HashMap ( ) ;
msg .put ( "メッセージ" simpleService .getMessage ( )) ;
メッセージを返します
}
}

重要なタスクは注 1 で完了し、サービス Bean が名前で接続されます。この時点で、http://localhost:8080/simple にアクセスすると、サービス層からの応答 {"message":"A simple service message"} が表示されます。

4. Micronaut を使用したリアクティブ NIO

次に、Reactor と組み合わせた Micronaut の使用について説明します。この場合、Reactor と非ブロッキング IO を使用するように現在のアプリケーションをリファクタリングします。アプリケーションは引き続き同じタスクを実行しますが、内部的には非ブロッキング スタック (Reactor と Netty) を使用します。

前述のように、Micronaut 3 にはデフォルトでリアクティブ ライブラリが含まれていないため、以下のリスト 5 に示すように、まず Reactor コアを Maven POM に追加する必要があります。

リスト 5. pom.xml に Reactor を追加する

 <依存関係>
<groupId> io.projectreactor </groupId>
<artifactId> リアクター- コア</artifactId>
<バージョン> 3.4.11 </バージョン>
</依存関係>

以下のリスト 6 に示すように、返された SimpleController を変更できます。

リスト6. コントローラーを非ブロッキングにする

 reacters.core.publisher.Mono インポートします

// ...

@得る
パブリック Mono < map >インデックス( ) {
マップ msg =新しい HashMap ( ) ;
msg .put ( "メッセージ" simpleService .getMessage ( )) ;
Mono.just ( msg) を返します
}
}

ご覧のとおり、Reactor の Mono クラスを使用して、同じ戻り値の型 (つまり、string/strin のマップ) をラップしているだけです。

リアクティブ モードでは、リモート サービスの使用に対して同様のサポートが利用できるため、アプリケーションを完全に非ブロッキング IO で実行できます。

5. Micronaut CLIを使用して新しいコンポーネントを作成する

Micronaut コマンドライン ツール (CLI) を使用して、さまざまなコンポーネントをスタブ化することもできます。たとえば、新しいコントローラーを追加する場合は、mn add-controller MyController コマンドを使用できます。これにより、以下のリスト 7 に示すように、新しいコントローラーとそれに対応するテストが出力されます。

リスト 7. Micronaut コマンドラインを使用して新しいコントローラーを作成する

 mn 作成-コントローラー MyController
|コントローラを src / main / java / micronaut / idg / MyControllerController.javaにレンダリングしました
| src / test / java / micronaut / idg / MyControllerControllerTest.javaにテストをレンダリングしました

6. Micronaut によるクラウドネイティブ開発

前述したように、Micronaut はクラウドネイティブのマイクロサービスとサーバーレス開発向けに構築されています。 Micronaut は、フェデレーションと呼ばれるクラウド ネイティブの概念をサポートしています。ここでのフェデレーションとは、複数の小規模なアプリケーションが同じ設定を共有し、同時に展開できることを意味します。これは、マイクロサービスの開発を容易にし、管理しやすいように設計されたマイクロサービス アーキテクチャによく似ています。フェデレーション サービスの詳細については、Micronaut のドキュメントを参照してください。

さらに、Micronaut はクラウド環境に簡単に導入できます。以下のリスト 8 に示すように、Google Cloud Platform (GCP) 用の Docker リポジトリをデプロイできます。

リスト 8. GCP の Docker リポジトリを使用して Micronaut アプリケーションをデプロイする

 ./mvnwデプロイ \
-Dパッケージング= docker\
- Djib .to .image = gcr .io / my - org / my - project :最新

この場合、プロジェクトは Docker イメージとして GCP の Docker リポジトリにプッシュされます。ここでは Jib Maven プラグインを使用していることに注意してください。実際の Docker ファイルを作成しなくても、Java プロジェクトを Docker イメージに変換できます。

さらに、-Dpackaging=docker を使用して Docker をパッケージング ツールとして識別しました。パッケージ化が完了したら、以下のリスト 9 に示すように、GCP コマンドライン ツールを使用してプロジェクトをデプロイできます。

リスト9. コマンドラインからDockerイメージを実行する

 gcloud 実行デプロイ \
--image=gcr.io/my-org/my-project:最新\
--プラットフォーム管理\
--認証されていないものを許可する

Micronaut がサポートするもう 1 つのクラウド ネイティブ機能はトレースです。たとえば、Micronaut を使用すると、さまざまなアノテーションを通じて Jaeger による分散トレースを有効にするのが非常に簡単になります。

以下のリスト 10 に示すように、マイクロサービス アプリケーションの application.xml ファイル内のすべてのリクエストをトレースするように Jaeger を構成できます。

リスト 10. application.xml での Jaeger 設定

トレース:
イエガー:
有効: true
サンプラー:
確率: 1

7. まとめ

Micronaut は、クラウドネイティブおよびマイクロサービス開発に適したさまざまな機能を提供します。同時に、このフレームワークは、従来の API ベースの開発をシンプルかつ明確にするのに適しています。さらに、Reactive NIO の Reactor や Netty とうまく統合できます。

オリジナルリンク: https://www.infoworld.com/article/3658968/intro-to-micronaut-a-cloud-native-java-framework.html

翻訳者について

51CTO コミュニティの編集者である Julian Chen 氏は、IT プロジェクトの実装において 10 年以上の経験を持っています。社内外のリソースとリスクの管理に長けており、ネットワークと情報セキュリティの知識と経験の普及に注力しています。彼は、ブログ投稿、特別トピック、翻訳の形で最先端のテクノロジーと新しい知識を共有し続けています。彼はオンラインとオフラインで情報セキュリティのトレーニングや講義を頻繁に行っています。

<<:  IoT とクラウド コンピューティングの統合では、どのようなセキュリティ上の課題に直面しますか?

>>:  Dockerの基本について語る: Dockerの動作原理

推薦する

おすすめの値下げ: Xenpower - 60% オフ、XEN PV、大容量ハードディスク、大容量フロー、ミラノ

朗報です。プロメテウスは先月、クラウド VPS ブランド iwstack の値下げを発表しました。数...

世界の医療クラウドコンピューティング市場規模は2026年に768億ドルに達すると予想されている

11月29日、市場調査会社ResearchAndMarketsが発表した最新のレポートによると、ヘル...

検索ランディングページの最適化のヒントとコツ

ランディング ページは、ターゲット URL または宛先 URL と呼ばれることがよくあります。多くの...

ソースを制御することが鍵であり、検索エンジンを乗っ取ってSEOを行う

ソースを制御することが鍵であり、検索エンジンを乗っ取ってSEOを行う私はある問題について考えていまし...

雲の中で踊ったり寝たりするのは、ただのエネルギーの無駄遣いでしょうか?

北京の有名ナイトクラブONE THIRDは1月9日から3日連続で毎日5時間の「クラウドディスコ」生放...

ウェブサイトのランキングを向上させるための一般的な外部リンクプラットフォームの運用戦略の分析

ご存知のとおり、ウェブサイトの運用と最適化の目的は非常に明確です。ウェブサイトの重量を改善し、ウェブ...

独自のトラフィックをもたらすブランド広告ポジショニングワードの設計方法

月収10万元の起業の夢を実現するミニプログラム起業支援プランポジショニングの父であるトラウトが広告の...

mycustomhosting-7USD/KVM/4GB RAM/50GB HDD/2TB フロー/カナダ

mycustomhosting、HostCatがこの会社に関するニュースを初めて投稿したのは8月でし...

初心者必読:SEO初心者がSEOを学ぶための提案

私はしばらくSEOを勉強しており、私のSEOレベルは一般人より少し高いレベルに達していると思います。...

詳細:オンラインメディアからセルフメディアへの変革に関する実践的な情報の共有

編集者注: Sutu.com は 2009 年 4 月に設立され、今日で 5 周年を迎えます。他の多...

virpus-シアトル XEN 簡単なレビュー

「virpus-$5/4 cores/Xen/1g メモリ/40gSSD/3T トラフィック/2IP...

次世代ネットワークに向けて IPv6 テクノロジーを採用

有名な樽効果は、「バケツにどれだけの水が入るかは、最も短い木片によって決まる」ということを教えてくれ...

gigsgigscloud: 希少な 200Mbps の日本 CN2 VPS の簡単なレビュー。あなたをリッチな世界へお連れします!

gigsgigscloudの日本データセンターは数日前からオンラインになっています。主にKVMシリー...

オンライン広告チャネルは数多くありますが、自分に合ったプラットフォームをどのように選択すればよいのでしょうか?

はじめに:この記事を読んだ友人の中には、わかりにくいと感じる人もいるかもしれませんが、困難を感じてこ...

オリジナルで高品質なソフト記事を書くには?

2013年、Baiduのアルゴリズムは頻繁に更新されましたが、編集者は、Baiduのアルゴリズムがど...