Micronautは、モジュール式でテストが簡単なマイクロサービスアプリケーションを構築するための新世代のJVMベースのフルスタックマイクロサービスフレームワークです。この記事では、micronautを使用してマイクロサービスアプリケーションを構築する方法を2つの簡単な例で簡単に紹介します。
1.領事登録センターを運営する
領事をダウンロード
公式ウェブサイトからのダウンロードが遅すぎるため、次のような他のリソースを見つけることができます:https://download.csdn.net/download/m0_46455711/13184176
起動
ダウンロードしたファイルを解凍します。consul.exeファイルは1つだけで、コマンドラインから直接実行するだけです。
.\consul.exe agent -dev -ui
ブラウザを開いて、http:// localhost:8500 /にアクセスします。アクセスできることがわかった場合は、登録センターの領事が準備ができていることを意味します。
2、micronautをインストールします
- まず、micronautフレームワークをダウンロードします。公式ウェブサイトからダウンロードできますが、速度が遅くなります。https://download.csdn.net/download/m0_46455711/13184282からダウンロードできます。
- ダウンロードしたファイルを解凍し、そのbinディレクトリを環境変数Pathに追加します
第三に、レジストリとして領事を使用してマイクロサービスアプリケーションを構築します
プロジェクトビルドコマンド
プロジェクトが配置されているディレクトリで次のコマンドを実行して、サービスプロジェクトをビルドします。
mn create-app my-app1 --lang groovy --features hibernate-gorm,config-consul,discovery-consul
ここで、my-app1はプロジェクト名、groovyはメイン開発言語として指定され、hibernate-gormはデータフレームワークとして有効にされ、config-consulは構成センター、discovery-consulサービス登録ディスカバリーです。
構築されたプロジェクト
コマンドが実行されると、次のディレクトリ構造のプロジェクトが現在のディレクトリに生成され
ます。build.gradleを開くと、関連する依存関係が追加されていることがわかります。もちろん、ここで他の依存関係を追加することもでき
ます。ファイルを開くbootstrap.yml、サービスレジストリのアドレスがローカルおよび8500として構成されていることがわかります。これは、以前に実行した領事です。もちろん、現在のサービスのポートをここで設定することもでき
ます。application.ymlis h2データベースで構成され、
デフォルトで休止状態になっています:defaultこの場合、gradle-6.7-bin.zipですが、ダウンロードを長時間ダウンロードできないため、手動でローカルに変更できます。ダウンロードしたzip。たとえば、ここでは、gradle-6.7-all.zipに変更しました。
4、コードを書く
1. SomeTestという名前のドメインクラス(簡単な理解はデータベース操作クラスです)を作成します。
package my.app1.domain
import grails.gorm.annotation.Entity
@Entity
class SomeTest {
long id
String name
}
アノテーション@Entityが必要であり、このクラスがドメインクラスであることを示していることに注意してください。
2.サービスを作成します
package my.app1.service
import grails.gorm.transactions.Transactional
import my.app1.domain.SomeTest
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import javax.inject.Singleton
@Singleton
@Transactional
class HelloService {
private static Logger log = LoggerFactory.getLogger(HelloService.class)
void addSomeTest(){
SomeTest someTest=new SomeTest()
someTest.id=0
someTest.name="hello"
if(!someTest.save(flush:true)){
log.error("保存数据到数据库出错:",someTest.getErrors())
}
}
List<SomeTest> findAllSomeTest(){
return SomeTest.findAll()
}
}
ここでの注釈@Singletonはモノマーを示し、注釈@Transactionalはドメインクラスをここで使用できることを示します
3.コントローラーを作成します
package my.app1.controller
import io.micronaut.http.MediaType
import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Get
import my.app1.domain.SomeTest
import my.app1.service.HelloService
import javax.inject.Inject
@Controller("/hello")
class HelloController {
@Inject
HelloService helloService
@Get(uri="/add", produces="text/plain")
String add() {
helloService.addSomeTest()
return "ok"
}
@Get(uri="/all", produces= MediaType.APPLICATION_JSON)
List<SomeTest> all() {
return helloService.findAllSomeTest()
}
}
これについては何も言うことはありません。唯一言うことは、アノテーション@Injectが、以前に作成したサービスを注入するためにここで使用されているということです。
これまで、データベース操作機能を備えたマイクロサービスを作成しました。アプリケーションでmainメソッドを実行してマイクロサービスを開始します。起動が成功したら、ブラウザを使用して対応するインターフェイスにアクセスし、問題がないことを確認します。領事サービスにも登録されています。
5.別のマイクロサービスを作成し、レジストリを介してアクセスします
マイクロサービスフレームワークの重要な要件は、サービスの登録と検出、およびサービス間の呼び出しです。これまでの説明から、micronautが領事クライアントを統合しており、簡単な構成でサービスを開始した後、サービスレジストリに自動的に登録できることがわかります。もちろん、micronautは、サービスの検出と呼び出しに対しても優れたサポートを提供します。
1.新しいマイクロサービスを作成します
mn create-app my-app2 --lang groovy --features hibernate-gorm,config-consul,discovery-consul
2.サービスポートを設定します
micronaut:
server:
port: 8082
3.新しいコントローラーを作成します
package my.app2
import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Get
import org.slf4j.Logger
import org.slf4j.LoggerFactory
@Controller("/hello")
class HelloController {
private static Logger log = LoggerFactory.getLogger(HelloController.class)
@Get(uri="/", produces="text/plain")
String index() {
log.info("im hello two")
"im hello two"
}
}
4.マイクロサービスmy-app1でクライアントを呼び出すサービスを追加します
package my.app1.client
import io.micronaut.http.MediaType
import io.micronaut.http.annotation.Get
import io.micronaut.http.client.annotation.Client
import io.micronaut.retry.annotation.Retryable
@Client("myApp2")
@Retryable
interface HelloClient {
@Get(value = "/hello", processes = MediaType.TEXT_PLAIN)
String hello()
}
アノテーション@Clientは、このインターフェースをサービス呼び出しインターフェースとして識別し、myApp2はサービス名です(コマンドを使用してmy-app2をビルドした後、作成されたサービス名はmyApp2であり、構成ファイルのブートストラップで表示および変更できます。 yml)、そしてそれも注目に値しますここでのサービス名は、呼び出されたサービスの特定のhttpアドレスとポートに置き換えることもできます。
5.マイクロサービスmy-app1にフォールバックを追加して、サービスが利用できないときに呼び出されたインターフェイスがデフォルト値を返すようにします
package my.app1.client;
import io.micronaut.retry.annotation.Fallback;
import io.micronaut.retry.annotation.Recoverable;
@Fallback
@Recoverable
public class HelloFallback implements HelloClient {
@Override
public String hello() {
return "i am hello fallback";
}
}
ここで注意する必要があるのは、GroovyファイルではなくJavaファイルでなければならないということです。具体的な理由はわかりません。非常に落ち込んでいます。
6.サービスを使用して、マイクロサービスmy-app1でクライアントを呼び出します
@Injectを使用してクライアントを注入し、通常のメソッドのようにサービスインターフェイスを呼び出します
7.新しく作成したサービスmy-app2を開始し、サービスmy-app1を再起動します
ブラウザアクセス:http:// localhost:8081 / hello / add、戻り値を確認できます:ok im hello two
総括する
要約するものは何もありません。例のダウンロードアドレスを貼り付けるだけです
https://gitee.com/luoye_lj/micronaut_example