Spring Cloud+Nacos登録センターの詳細説明と開発事例

目次

1. Nacos の主な特徴は次のとおりです。

2. 論理アーキテクチャとそのコンポーネントの概要

3.Nacosのインストール

1. バージョンの選択

2. 環境を整える

3. ソースコードまたはインストールパッケージをダウンロードします。

4. サーバーを起動します

 5. サーバーをシャットダウンします。

4.Nacos Discovery Starterの導入方法

5.プロバイダーアプリケーションを起動する

1 pom.xml 構成。完全な pom.xml 構成は次のようになります。

2 application.properties の設定。

3 プロバイダーの例を開始します。次のように:

4 サービスのエンドポイント

5 コンシューマアプリケーションを起動する

6.Nacos Starterに関する詳細な設定項目情報


1. Nacos の主な特徴は次のとおりです。

  • サービスの検出とサービスの健全性の監視

Nacos は、DNS ベースおよび RPC ベースのサービス ディスカバリをサポートしています。サービス プロバイダーはネイティブ SDKOpenAPI、または >検索サービスと検出サービス。 HTTP&API またはDNS TODOサービスを登録した後、サービス利用者は 独立エージェント TODO

Nacos は、サービスのリアルタイムのヘルス チェックを提供し、異常なホストやサービス インスタンスからのリクエストを防ぎます。 Nacos は、トランスポート層 (PING または TCP) およびアプリケーション層 (HTTP、MySQL、ユーザー定義など) でのヘルスチェックをサポートします。複雑なクラウド環境およびネットワーク トポロジ環境 (VPC、エッジ ネットワークなど) でのサービスのヘルス チェックのために、Nacos は、エージェント レポート モードとサーバー側のアクティブ検出という 2 つのヘルス チェック モードを提供します。 Nacos は、ヘルス ステータスに基づいてサービスの可用性とトラフィックを管理するのに役立つ統合ヘルス チェック ダッシュボードも提供します。

  • 動的構成サービス

動的構成サービスを使用すると、すべての環境のアプリケーション構成とサービス構成を集中的かつ外部かつ動的に管理できます。

動的構成により、構成が変更されたときにアプリケーションやサービスを再デプロイする必要がなくなり、構成管理がより効率的かつ機敏になります。

構成の一元管理により、ステートレス サービスの実装が容易になり、オンデマンドでサービスを柔軟に拡張できます。

Nacos は、すべてのサービスとアプリケーションの構成の管理に役立つ、シンプルで使いやすい UI (コンソール サンプル デモ) を提供します。 。 Nacos は、構成バージョンの追跡、カナリア リリース、構成のワンクリック ロールバック、クライアント構成更新ステータスの追跡など、すぐに使用できる一連の構成管理機能も提供しており、運用環境での構成をより安全に管理するのに役立ちます。構成変更に伴うリスクを軽減します。

  • ダイナミックDNSサービス

ダイナミック DNS サービスは加重ルーティングをサポートしているため、中間層のロード バランシング、より柔軟なルーティング ポリシー、トラフィック制御、およびデータ センター イントラネット用のシンプルな DNS 解決サービスの実装が容易になります。ダイナミック DNS サービスを使用すると、DNS プロトコルに基づいたサービス検出の実装も容易になり、ベンダー独自のサービス検出 API と結合するリスクを排除できます。

Nacos は、関連するドメイン名と利用可能なサービスの IP:PORT リストの管理に役立つ、いくつかの簡単なDNS API TODOを提供します。 >

  • サービスとそのメタデータ管理

Nacos を使用すると、管理サービスの説明、ライフサイクル、サービスの静的依存関係分析、サービスの健全性ステータス、サービス トラフィック管理、ルーティングとセキュリティ ポリシー、サービス SLA など、マイクロサービス プラットフォーム構築の観点からデータ センター内のすべてのサービスとメタデータを管理できます。そして最も重要なメトリクス統計。

2. 論理アーキテクチャとそのコンポーネントの概要

  • サービス管理: サービス CRUD、ドメイン名 CRUD、サービス健全性ステータス チェック、サービス ウェイト管理およびその他の機能を実装します。

  • 構成管理: 構成管理CRUD、バージョン管理、グレースケール管理、モニタリング管理、プッシュトラック、データ集計などの機能を実現します。

  • メタデータ管理: メタデータ CURD およびマーキング機能を提供します。

  • プラグインメカニズム: 3 つのモジュールの分離および結合機能を実現し、拡張ポイント SPI メカニズムを実現します。

  • イベントメカニズム: 非同期イベント通知、SDK データ変更の非同期通知、その他のロジックを実装します。

  • ログ モジュール: ログ分類、ログ レベル、ログの移植性 (特に競合を避けるため)、ログ形式、例外コード + ヘルプ ドキュメントを管理します。

  • コールバック メカニズム: SDK はデータを通知し、統合モードを通じてユーザー処理にコールバックします。インターフェースとデータ構造は拡張可能である必要がある

  • アドレッシング モード: IP、ドメイン名、ネームサーバー、ブロードキャストなどの複数のアドレッシング モードを解決するには、スケーラブルである必要があります。

  • プッシュ チャネル: サーバーとストレージ間、サーバー間、サーバーと SDK 間のプッシュ パフォーマンスの問題を解決します。

  • 容量管理: 各テナントとグループの容量を管理して、ストレージが上書きされてサービスの可用性に影響を与えるのを防ぎます。

  • トラフィック管理: リクエストの頻度、ロングリンクの数、パケットサイズを制御し、テナントやグループなどの多次元に応じてリクエストのフロー制御を行います。

  • キャッシュ メカニズム: 災害復旧ディレクトリ、ローカル キャッシュ、サーバー キャッシュ メカニズム。災害復旧ディレクトリを使用するにはツールが必要です

  • 起動モード: スタンドアロン モード、構成モード、サービス モード、DNS モード、またはすべてのモードに従って、さまざまなプログラム + UI を起動します。

  • 整合性プロトコル: 異なるデータ、異なる整合性要件、および異なる整合性メカニズムを解決します。

  • ストレージ モジュール: データの永続性、非永続ストレージを解決し、データの断片化の問題を解決します。

  • ネームサーバー: ネームスペースからクラスターID へのルーティングの問題を解決し、ユーザー環境と nacos 物理環境の間のマッピングの問題を解決します。

  • CMDB: メタデータ ストレージの問題を解決し、サードパーティの cmdb システムとドッキングして、アプリケーション、人、リソース間の関係を解決します。

  • メトリクス: 標準メトリクス データを公開して、サードパーティの監視システムとの接続を容易にします。

  • トレース: SLA システム、ログ ホワイトニング、プッシュ トレース、その他の機能との接続を容易にする標準トレースを公開し、計測および課金システムと接続できます。

  • アクセス管理: Alibaba Cloud サービスをアクティブ化し、ID、容量、権限を割り当てるプロセスに相当します。

  • ユーザー管理: ユーザー管理、ログイン、SSO、その他の問題を解決します。

  • 権限管理: ID 認識、アクセス制御、ロール管理などの問題を解決します。

  • 監査システム: さまざまな企業の監査システムとの接続を容易にする拡張インターフェース

  • 通知システム: 主要なデータの変更または操作は、SMS システムを通じて簡単に伝達され、対応する担当者にデータ変更を通知できます。

  • OpenAPI: シンプルで使いやすく、多言語の統合に便利な、標準的な Rest スタイルの HTTP インターフェイスを公開します。

  • コンソール: サービス管理、構成管理、その他の操作のための使いやすいコンソール

  • SDK: 多言語 SDK

  • エージェント: dns-f 類似モード、またはメッシュおよび他のソリューションと統合

  • CLI: コマンド ラインは製品の軽量管理を実行し、git と同じくらい簡単に使用できます。

3.Nacosのインストール

サービス ディスカバリは、マイクロサービス アーキテクチャ システムの最も重要なコンポーネントの 1 つです。すべてのサービス プロバイダーのサービス リストをクライアントごとに手動で構成することは非常に困難であり、サービスの動的な拡張や縮小には役立ちません。 Nacos Discovery Starter は、Nacos サーバーにサービスを自動的に登録するのに役立ち、サービス インスタンスのサービス リストを動的に検出して更新できます。さらに、Nacos Discovery Starter は、サービス インスタンス自体の一部のメタデータ情報 (ホスト、ポート、ヘルス チェック URL、ホームページなど) も Nacos に登録します。

1. バージョンの選択

 バージョン 2.X を使用することをお勧めします。現在推奨されている安定バージョンは 2.1.1 です。

2. 環境を整える

Nacos は Java 環境に依存して実行されます。コードから Nacos を構築して実行する場合は、このための Maven 環境も構成する必要があります。必ず次のバージョンにインストールして使用してください。環境:Maven a>

  1. 64 ビット OS、Linux/Unix/Mac/Windows をサポート、Linux/Unix/Mac を推奨します。
  2. 64 bit JDK 1.8+;下载 & 配置
  3. Maven 3.2.x+;下载 & 配置

3. ソースコードまたはインストールパッケージをダウンロードします。

Nacos は、ソース コードと配布パッケージを通じて入手できます。

Githubからソースコードをダウンロード

git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U  
ls -al distribution/target/

// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin

コンパイルされた圧縮パッケージをダウンロードする方法

 unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
  cd nacos/bin

4. サーバーを起動します

  • 注: Nacos は 2C4g60g*3 以上のマシン構成で実行する必要があります。

Linux/Unix/Mac

起動コマンド (スタンドアロンはクラスター モードではなく、スタンドアロン モードの動作を表します):

sh startup.sh -m standalone

ubuntu システムを使用している場合、またはスクリプトを実行してエラー メッセージ [[ シンボルが見つかりません] が表示される場合は、次のように実行してみてください。

bash startup.sh -m standalone

ウィンドウズ

起動コマンド (スタンドアロンはクラスター モードではなく、スタンドアロン モードの動作を表します):

startup.cmd -m standalone

 5. サーバーをシャットダウンします。

Linux/Unix/Mac

sh shutdown.sh

ウィンドウズ

shutdown.cmd

4.Nacos Discovery Starterの導入方法

プロジェクトでのサービス検出に Nacos を使用する場合は、グループ ID com.alibaba.cloud とアーティファクト ID spring-cloud-starter-alibaba-nacos-discovery を持つスターターを使用します。


<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

5.プロバイダーアプリケーションを起動する

次の手順では、Nacos にサービスを登録する方法を示します。

1 pom.xml 構成。完全な pom.xml 構成は次のようになります。


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>open.source.test</groupId>
    <artifactId>nacos-discovery-test</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>nacos-discovery-test</name>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>${spring.boot.version}</version>
        <relativePath/>
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

2 application.properties の設定。

Nacos に関するいくつかの基本構成は、次に示すように application.properties (または application.yaml) でも構成する必要があります。


server.port=8081
spring.application.name=nacos-producer
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
management.endpoints.web.exposure.include=*
サービスの登録と検出に Nacos を使用したくない場合は、spring.cloud.nacos.discovery.enabled を false に設定できます。

3 プロバイダーの例を開始します。次のように:


@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosProducerDemoApplication.class, args);
    }

    @RestController
    public class EchoController {
        @GetMapping(value = "/echo/{string}")
        public String echo(@PathVariable String string) {
            return "Hello Nacos Discovery " + string;
        }
    }
}

このとき、登録されたサービス情報は Nacos コンソール上で確認できます。

プロバイダー アプリケーションを開始する前に、Nacos サービスを開始してください。具体的な起動方法については、こちらをご参照ください。 ナコス公式ウェブサイト

4 サービスのエンドポイント

spring-cloud-starter-alibaba-nacos-discovery は実装時に EndPoint を提供し、EndPoint のアクセスアドレスは http://ip:port/actuator/nacos-discovery です。エンドポイント情報は主に次の 2 つのカテゴリを提供します。

1. 購読: 現在利用可能なサービス購読者を表示します

2. NacosDiscoveryProperties: 現在のサービス インスタンスの Nacos の基本構成を表示します。

サービス インスタンスが EndPoint にアクセスするための情報は次のとおりです。


{
  "subscribe": [
    {
      "jsonFromServer": "",
      "name": "nacos-provider",
      "clusters": "",
      "cacheMillis": 10000,
      "hosts": [
        {
          "instanceId": "30.5.124.156#8081#DEFAULT#nacos-provider",
          "ip": "30.5.124.156",
          "port": 8081,
          "weight": 1.0,
          "healthy": true,
          "enabled": true,
          "cluster": {
            "serviceName": null,
            "name": null,
            "healthChecker": {
              "type": "TCP"
            },
            "defaultPort": 80,
            "defaultCheckPort": 80,
            "useIPPort4Check": true,
            "metadata": {

            }
          },
          "service": null,
          "metadata": {

          }
        }
      ],
      "lastRefTime": 1541755293119,
      "checksum": "e5a699c9201f5328241c178e804657e11541755293119",
      "allIPs": false,
      "key": "nacos-producer",
      "valid": true
    }
  ],
  "NacosDiscoveryProperties": {
    "serverAddr": "127.0.0.1:8848",
    "endpoint": "",
    "namespace": "",
    "logName": "",
    "service": "nacos-provider",
    "weight": 1.0,
    "clusterName": "DEFAULT",
    "metadata": {

    },
    "registerEnabled": true,
    "ip": "30.5.124.201",
    "networkInterface": "",
    "port": 8082,
    "secure": false,
    "accessKey": "",
    "secretKey": ""
  }
}

5 コンシューマアプリケーションを起動する

コンシューマ アプリケーションは、プロバイダ アプリケーションを開始するほど単純ではない場合があります。 Consumer 側は Provider 側が提供する REST サービスを呼び出す必要があるためです。この例では、LoadBalanceClient と RestTemolate を明示的に使用してアクセスする、最も原始的な方法を使用します。 pom.xmlとapplication.propertiesの設定については、「1.2 まとめ」を参照してください。 Consumer アプリケーションを起動するサンプル コードは次のとおりです。


@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApp {

    @RestController
    public class NacosController{

        @Autowired
        private LoadBalancerClient loadBalancerClient;
        @Autowired
        private RestTemplate restTemplate;

        @Value("${spring.application.name}")
        private String appName;

        @GetMapping("/echo/app-name")
        public String echoAppName(){
            //使用 LoadBalanceClient 和 RestTemolate 结合的方式来访问
            ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-provider");
            String url = String.format("http://%s:%s/echo/%s",serviceInstance.getHost(),serviceInstance.getPort(),appName);
            System.out.println("request url:"+url);
            return restTemplate.getForObject(url,String.class);
        }

    }

    //实例化 RestTemplate 实例
    @Bean
    public RestTemplate restTemplate(){

        return new RestTemplate();
    }

    public static void main(String[] args) {

        SpringApplication.run(NacosConsumerApp.class,args);
    }
}

この例では、LoadBalancerClient のインスタンスを挿入し、RestTemplate を手動でインスタンス化し、アプリケーションに spring.application.name の構成値を挿入します。その目的は、プロバイダーが提供するサービスを呼び出すときに、現在構成されているアプリケーション名が表示されます。

Consumer アプリケーションを開始する前に、Nacos サービスを開始してください。具体的な起動方法については、こちらをご参照ください。 ナコス公式ウェブサイト

起動後、Consumer が提供する http://ip:port/echo/app-name インターフェイスにアクセスします。ここでテストを開始したポートは 8082 です。アクセス結果は以下の通りです。

アクセスアドレス:http://127.0.0.1:8082/echo/アプリ名

アクセス結果: Hello Nacos Discovery nacos-consumer

6.Nacos Starterに関する詳細な設定項目情報

spring-cloud-starter-alibaba-nacos-discovery に関するその他のスターター設定項目は次のとおりです。

設定項目

デフォルト値

説明する

サーバーアドレス

spring.cloud.nacos.discovery.server-addr

なし

Nacos サーバーが IP アドレスとポートのリスニングを開始します

サービス名

spring.cloud.nacos.discovery.service

${spring.application.name}

現在のサービスに名前を付けます

サービスのグループ化

spring.cloud.nacos.discovery.group

デフォルト_グループ

サービスが存在するグループを設定します

重み

spring.cloud.nacos.discovery.weight

1

値の範囲は 1 ~ 100 です。値が大きいほど重みが大きくなります。

ネットワークカード名

spring.cloud.nacos.discovery.network-interface

なし

IP が設定されていない場合、登録された IP はネットワーク カードに対応する IP アドレスになります。この項目が設定されていない場合は、デフォルトで最初のネットワーク カードのアドレスが使用されます。

登録されているIPアドレス

spring.cloud.nacos.discovery.ip

なし

最優先

登録済みポート

spring.cloud.nacos.discovery.port

-1

デフォルトでは、構成は必要なく、自動的に検出されます。

名前空間

spring.cloud.nacos.discovery.namespace

なし

一般的なシナリオの 1 つは、開発およびテスト環境と運用環境の間でのリソース (構成やサービスなど) の分離など、さまざまな環境での登録の区別と分離です。

アクセスキー

spring.cloud.nacos.discovery.access-key

なし

Alibaba Cloud にアクセスする場合、Alibaba Cloud 上のクラウド アカウント名

秘密鍵

spring.cloud.nacos.discovery.secret-key

なし

Alibaba Cloud にアクセスする場合、Alibaba Cloud のクラウド アカウントのパスワード

Metadata

spring.cloud.nacos.discovery.metadata

なし

マップ形式の構成を使用すると、ユーザーは自分のニーズに応じて一部のサービス関連のメタデータ情報をカスタマイズできます。

ログファイル名

spring.cloud.nacos.discovery.log-name

なし

集まる

spring.cloud.nacos.discovery.クラスター名

デフォルト

Nacos クラスター名として設定します。

アクセス・ポイント

spring.cloud.nacos.discovery.enpoint

UTF-8

リージョン内の特定のサービスの入口ドメイン名。サーバー アドレスは、このドメイン名を通じて動的に取得できます。

リボンを統合するかどうか

リボン.nacos.有効

真実

通常は true に設定できます

Nacos Watchをオンにするかどうか

spring.cloud.nacos.discovery.watch.enabled

真実

false に設定するとウォッチをオフにできます

登録されているIPアドレスの種類

spring.cloud.nacos.discovery.ip-type

IPv4

IPv4 と IPv6 の両方のタイプを構成できます

結果:Nacos の発見 · alibaba/spring-cloud-alibaba Wiki · GitHub

おすすめ

転載: blog.csdn.net/leesinbad/article/details/128584493