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

推薦する

2007 ビデオ ウェブサイト キーワード

2006年、YouTubeは中国の未成熟なビデオ業界に美しい神話を描きました。この神話に後押しされて...

SEOはウェブサイト運営の成功に関係しています。仮想ホストの選択に注意する必要があります

SEO がウェブサイトの運用に与える影響については多くの人が知っていると思いますが、仮想ホスティング...

半年以上Web業界に携わってきて、色々な思いが溢れています!

昨年ウェブサイトを立ち上げてから半年が経ちました。現在、両方のウェブサイトが安定して稼働しています。...

百度のザクロアルゴリズムに直面したとき、私たちは何に注意すべきか

2013年5月17日午後、百度のウェブ検索不正対策チームは百度ウェブマスタープラットフォームで、1週...

VPS のパフォーマンスをテストするにはどうすればいいですか?

VPS のパフォーマンスをテストするには、専用のパフォーマンス テスト スクリプトを使用して、パフォ...

外部リンクトラフィックを直接的または間接的に導入するにはどうすればよいですか?

外部リンクの力は初期の頃から明らかでした。ウェブサイトに 10,000 を超える外部リンクがある場合...

差別化できるウェブサイト運営の秘訣:ユーザーの隠れたニーズを深く掘り下げる

ウェブサイトの運営は競合他社との競争と切り離すことはできません。ウェブサイト関連のデータ分析では、「...

検索エンジンが重視するものと重視しないもの

SEO に携わる人たちがこう言うのをよく耳にします。「Baidu はまたおかしなことをしているの?」...

テンセントと国家電網重慶統合エネルギーは、重慶初の大規模グリーンデータセンターを建設するためにカーボンニュートラル戦略提携を締結した。

8月23日、テンセントと国家電網重慶総合エネルギー公司は2021年重慶スマート博覧会で戦略的協力協定...

大容量ハードドライブ VPS - 年間 35 ドル / 512 MB メモリ / 500 g ハードドライブ / 5 T トラフィック / ストレージ VPS / Alipay

virmachの大容量ハードドライブVPS(ストレージVPS)は昨年末に先行販売を開始し、それ以来在...

SEOを学ぶ初心者の混乱とその対処法の簡単な分析

SEO に出会ったばかりの友人たちは、いつも熱意にあふれていますが、しばらく勉強したり実践したりする...

HiTao.comは2年間休眠状態にあったが、Taobaoが支配株主となり、今年中に利益を上げることを目指す

新浪テクノロジー 神雲芳「競争には底線を引いてください」。2月28日正午、Jumei CEOのChe...

2022 年に注目を集めるクラウド テクノロジーはどれでしょうか?

クラウドネイティブが主役にデジタルエンジニアリングサービス企業InfostretchのCTOであるマ...

VMware とパートナーは協力してイノベーションを推進し、技術の進歩を促進し、業界の変革を実現します。

今日のデジタル時代において、科学技術革新は世界経済の質の高い発展を推進する重要な原動力となっています...

ローカルウェブサイトをどのように運営すべきかについて簡単に説明します。小売業者と相互利益を達成するにはどうすればよいでしょうか。

投稿者のように、自分のウェブサイトを通じて中国の夢(家、車、家族)を実現することを夢見ている個人ウェ...