micronaut + consulがマイクロサービスアプリケーションを構築

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をインストールします

  1. まず、micronautフレームワークをダウンロードします。公式ウェブサイトからダウンロードできますが、速度が遅くなります。https://download.csdn.net/download/m0_46455711/13184282からダウンロードできます。
  2. ダウンロードしたファイルを解凍し、その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

micronaut_cloud_examples.zip

おすすめ

転載: blog.csdn.net/m0_46455711/article/details/110085955