クラウドネイティブ 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の動作原理

推薦する

Teamsun: 業界の変革を促進する優れたクラウド基盤の構築

[51CTO.com からのオリジナル記事] クラウド コンピューティング テクノロジーが成熟するに...

speedykvm - Dallas KVM/SSD/VPS の簡単なレビュー、高性能

昨日、暇だったのでspeedykvmを推奨する記事「推奨:今年のベストKVM/SSD[raid10]...

簡単な分析:ウェブサイトのトラフィックの減少に影響を与える18の理由!

月給5,000~50,000のこれらのプロジェクトはあなたの将来ですウェブサイトのトラフィックは常に...

長期的なSEO戦略: コンテンツに戻る

2月1日、百度は2013年中国ウェブサイト発展動向レポートを発表し、中国の現在のウェブサイト生態環境...

2018年には、約200社の顧客がクラウドコンピューティングにZStackを選択しました。

私はXinさんと年に1、2回コミュニケーションを取っていますが、そのたびにたくさんの新しい驚きがあり...

Redis分散ロックの8つの落とし穴について話す

[[425706]]序文分散システムでは、Redis 分散ロックは比較的シンプルで効率的であり、多く...

クモの友好度を高めるための8つのこと

すべてのウェブマスターにとって、Baiduでのウェブサイトのランキングはウェブサイトのトラフィックに...

プロモーションにビデオを活用するには? Baiduビデオコレクションが大盛況!

月給5,000~50,000のこれらのプロジェクトはあなたの将来です動画プロモーションは多くの人にと...

私はBaidu入札のコア戦略を学ぶために多額の費用を費やしました。

私は機械会社で働いており、主に会社のBaidu入札の管理を担当しています。会社のBaidu入札の1日...

ウェブマスターは、Baidu インデックスの変更に基づいてキーワードの最適化の方向を調整することを学びます

多くのウェブマスターは、ウェブサイトのコアキーワードを決定し始めるときに、Baidu Indexを注...

Baidu は、あなたのウェブサイトにトロイの木馬によるセキュリティリスクがあることをお知らせします。どうすれば解決できますか?

ウェブサイトを最適化する際に、ウェブサイトにトロイの木馬が見つかるという状況に遭遇したことがあるかも...

hostodo: 米国の高トラフィック VPS、最低 3 ドル、月間 8T トラフィック、1.5G メモリ/1 コア/25g NVMe/ラスベガス + マイアミ

Hostodo は年末から低価格プロモーションで VPS を運営しています。市場でのブランド認知度は...

オンラインねずみ講帝国の真実:メンバーは多くの地域でその概念を広め、サイバートロールを雇った

【要点】全国30省の人員を巻き込み、680万人以上の会員を育成し、最大38億元の預金を集めた…江西ワ...

オンラインマーケティングには、独立したモールを選択するか、ショッピング プラットフォームを選択するのが良いでしょうか?

これは昨日、Qiyi Network カスタマー サービスで顧客から寄せられた質問です。彼はオンライ...

Java JVM の秘密を解明

この記事では、JVM メモリ モデル、クラス ローダー、GC 回復アルゴリズム、GC コレクターなど...