登録センター/構成管理 - SpringCloud Alibaba Nacos

ナコスの紹介

Nacos は、クラウドネイティブ アプリケーションを構築するための、使いやすい動的なサービス検出、構成、およびサービス管理プラットフォームです。

Nacos の主な機能は次のとおりです。

  • サービス検出とサービス状態の監視: サービス プロバイダーがネイティブ SDK、OpenAPI などを使用してサービスを登録した後、サービス コンシューマーは HTTP&API を使用してサービスを検索および検出できます。Nacos は、サービスのリアルタイムのヘルス チェックを提供し、異常なホストやサービス インスタンスからのリクエストを防ぎます。
  • 動的構成サービス: 動的構成サービスを使用すると、すべての環境のアプリケーション構成とサービス構成を集中的かつ外部かつ動的に管理できます。動的構成により、構成が変更されたときにアプリケーションやサービスを再デプロイする必要がなくなり、構成管理がより効率的かつ機敏になります。
  • ダイナミック DNS サービス: ダイナミック DNS サービスは重み付けルーティングをサポートしており、中間層のロード バランシング、より柔軟なルーティング ポリシー、トラフィック制御、データ センター イントラネット向けのシンプルな DNS 解決サービスの実装を容易にします。
  • サービスとメタデータの管理: Nacos は、管理サービスの説明、ライフサイクル、サービスの静的依存関係分析、サービスの健全性ステータス、サービス トラフィックの管理、ルーティングとセキュリティ ポリシー、サービス SLA、および主要なメトリクス統計

ナコスのクイックスタート

1.Nacosサーバースタンドアロンモード

Nacos を使用する前に、Nacos をダウンロードし、Nacos Server を起動する必要があります。Nacos Server には、スタンドアロン (単一マシン) とクラスター (クラスター) の 2 つの動作モードがあります。ここでは、2.2.3.release、Windows 環境を例として説明します。

前へ Github ダウンロード Nacos サーバー:GitHub - alibaba/nacos: クラウド ネイティブ アプリケーションを構築するための、使いやすい動的なサービス検出、構成、およびサービス管理プラットフォームです。

圧縮パッケージを解凍し、bin ディレクトリでコマンドを実行します。.\startup.cmd -m standalone

ブラウザで http://localhost:8848/nacos にアクセスし、ユーザー名とパスワード Nacos/Nacos を入力して、Nacos ホームページに入ります。

Nacos をシャットダウンするには、bin ディレクトリでコマンドを実行します。.\shutdown.cmd

バージョン 0.7 より前の Nacos は、スタンドアロン モードでデータを保存するためにインライン データベースを使用していましたが、これはデータ ストレージの基本的な状況を観察するのに不便でした。バージョン 0.7 以降は、MySQL データ ソース機能をサポートしました。具体的な操作手順は次のとおりです:

  • MySQL データベースをインストールします (バージョン 5.6.5 以降が必要)

  • データベース nacos_config を作成し、conf ディレクトリで mysql-schema.sql 初期化ファイルを見つけて初期化します。

  • conf/applicationproperties ファイルを変更し、MySQL データ ソース構成を追加します。

    ### Count of DB:
    db.num=1
    ### Connect URL of DB:
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    db.user.0=root
    db.password.0=123
    
  • その後、Nacos のすべてのデータが MySQL に保存されます。

2.Nacosサーバークラスターモード

Nacos スタンドアロン モードは、テストおよびスタンドアロンでの使用にのみ適しています。ほとんどの実稼働環境では、高可用性を確保するためにクラスター モードが使用されます。

次に、Nacso クラスタ環境の構築方法について説明します、具体的な手順は以下のとおりです。

  • ダウンロードした Nacos インストール パッケージを 2 つのコピーにコピーし、それぞれ Nacos-01、Nacos-02、および Nacos-03 という名前を付けます。クラスター モードでは構成データベース (MySQL など) を使用する必要があることに注意してください。

  • Nacos-02 および Nacos-03 の構成ファイル conf/applicationproperties を変更し、サービス起動ポートをそれぞれ 8850 および 8852 に変更します。

    #*************** Config Module Related Configurations ***************#
    ### If use MySQL as datasource:
    ### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
    spring.datasource.platform=mysql
    spring.sql.init.platform=mysql
    #*************** Spring Boot Related Configurations ***************#
    ### Default web context path:
    server.servlet.contextPath=/nacos
    ### Include message field
    server.error.include-message=ALWAYS
    ### Default web server port:
    server.port=8850
    

    注: バージョン 2.0 以降、nacos は外部ポートに加えて、他の 3 つのポートも占有します。

    • ラフトポート: ${server.port} - 1000
    • grpc ポート: ${server.port} + 1000
    • サーバーの grpc ポート: ${server.port} + 1001

    外部ポートが 8848 であると仮定します。つまり、7848、8848、9848、9849 の合計 4 つのポートが占有されるとします。そのため、同じマシン上で複数の nacos ノードを起動する場合は、すべての占有ポートを避けるように注意してください。

  • Nacos-01、Nacos-02、およびNacos-03のconfディレクトリにcluster.confクラスタ構成ファイルを追加します。

    ### 这里简单将3个nacos实例部署在同一个机器下
    # 
    127.0.0.1:8848
    127.0.0.1:8850
    127.0.0.1:8852
    
  • Nacos-01、Nacos-02、および Nacos-03 の bin ディレクトリを入力してコマンドを実行します.\startup.cmd。パラメータがない場合、デフォルトはクラスタ モードです。

3. Nacos+Nginx クラスターモード

次の設定を Nginx コア設定ファイル nginx.conf に追加します。

server {
	listen       8847;
	server_name  localhost;

	location /nacos {
		proxy pass http://nacos-server/nacos;
	}

	upstream nacos-server {
		server 127.0.0.1:8848;
		server 127.0.0.1:8850;
		server 127.0.0.1:8852;
	}
}

Nginx を起動し、http://localhost:8847/nacos にアクセスします。この時点で、Nacos+Nginx の構築が完了しました。


SpringBoot が Nacos に登録されました

1.Nacos構成管理

SpringBoot 2.3.12.RELEASE を例として、次の依存関係をプロジェクトの pom.xml ファイルに追加します。

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-config-spring-boot-starter</artifactId>
    <version>0.2.12</version>
</dependency>

application.properties で Nacos サーバーのアドレスを構成します。

# 如果搭建了集群只需要填其中一个节点的ip:port即可
nacos.config.server-addr=127.0.0.1:8848
# 如果配置了Nginx,则输入配置的地址,如上面我配置的
# nacos.config.server-addr=127.0.0.1:8847/nacos

スタートアップ クラスで使用して、@NacosPropertySourcespringboot-nacos-config の構成ソースとして dataId をロードし、自動更新を有効にします。

@SpringBootApplication
@NacosPropertySource(dataId = "springboot-nacos-config", autoRefreshed = true)
public class SpringbootNacosApplication {
    
    

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

Data-Id: springboot-nacos-configもちろん、設定ファイルをNacos 設定リストに追加する必要があります。

test.name=hahaha

Nacos アノテーションを通じて@NacosValueプロパティ値を設定する

@RestController("config")
public class ConfigCon {
    
    

    @NacosValue(value = "${test.name}", autoRefreshed = true)
    private String name;


    @GetMapping("get")
    public String get() {
    
    
        return name;
    }
}
2.Nacosサービス登録

次の依存関係をプロジェクトの pom.xml ファイルに追加します。

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-discovery-spring-boot-starter</artifactId>
    <version>0.2.12</version>
</dependency>

application.properties で Nacos サーバーのアドレスを構成します。

spring.application.name=springboot-nacos
server.port=8080
server.address=127.0.0.1

# 如果搭建了集群只需要填其中一个节点的ip:port即可
nacos.discovery.server-addr=127.0.0.1:8848
# 如果配置了Nginx,则输入配置的地址,如上面我配置的
nacos.discovery.server-addr=127.0.0.1:8847/nacos

スタートアップ クラスを変更して実行する

@SpringBootApplication
@NacosPropertySource(dataId = "springboot-nacos-config", autoRefreshed = true)
public class SpringbootNacosApplication implements CommandLineRunner {
    
    

    // 使用@NacosInjected注入Nacos的NamingService实例
    // NamingService是Nacos对外提供给使用者的接口
    @NacosInjected
    private NamingService namingService;

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

    @Value("${server.port}")
    private Integer serverPort;

    @Value("${server.address}")
    private String serverAddress;

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

    @Override
    public void run(String... args) throws Exception {
    
    
        //应用启动时,将服务注册到Nacos
        namingService.registerInstance(applicationName, serverAddress, serverPort);
    }
}

ナコス スプリングクラウド

このセクションでは、SpringBoot 2.3.12.RELEASE を例として、SpringCloud が Nacos を介して構成管理とサービス検出をどのように実装するかを主に説明します。

1.Nacos構成管理

次の依存関係をプロジェクトの pom.xml ファイルに追加します。

<dependencies>

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.2.10-RC1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

application.properties で Nacos サーバーのアドレスを構成します。

server.port=8080
spring.application.name=springcloud-nacos

spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# spring.cloud.nacos.config.server-addr=127.0.0.1:8847/nacos

spring.application.nameその後、Nacos 構成管理の datald フィールドの一部を形成します。Nacos Spring Cloud では、datald の完全な形式は次のとおりです。${prefix}-${spring.profile.active}.${file-extension}

  • ${prefix}: デフォルトはspring.application.nameの値ですが、spring.cloud.Nacos.config.prefix構成アイテムを通じて構成することもできます。
  • ${spring.profile.active}: 現在の環境に対応するプロファイル。spring.profile.active空の場合、対応するコネクタは-存在せず、datald のスプライシング形式は次のようになります。${prefix}.${file-extension}
  • ${file-extension}: 設定コンテンツのデータ形式。`spring.cloud.Nacos.config.file-extension を通じてプロパティまたは yaml タイプを設定できます。

Nacos 構成リストに springcloud-nacos.properties 構成ファイルを作成します

test.name=hahah

コントローラーを開発して構成を取得する

@RefreshScope
@RestController("config")
public class ConfigCon {
    
    

    @Value("${test.name}")
    private String name;

    @GetMapping("get")
    public String get() {
    
    
        return name;
    }
}
2.Nacosサービス登録

次の依存関係をプロジェクトの pom.xml ファイルに追加します。

<dependencies>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.2.10-RC1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

application.properties で Nacos サーバーのアドレスを構成します。

server.port=8080
spring.application.name=springcloud-nacos

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8847/nacos

スタートアップクラスにアノテーションを追加して、@EnableDiscoveryClientサービス登録検出機能を有効にします。

@EnableDiscoveryClient
@SpringBootApplication
public class SpringcloudNacosApplication {
    
    

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

Nacos管理ページのサービス一覧を確認すると、サービスがNacosに登録されていることがわかります。これにより、サービスプロバイダーとコンシューマーの両方が登録され、コンシューマーはサービス名を介してプロバイダーのインターフェースを直接呼び出すことができます。


ネームスペースとグループ

Nacos は、DataId に加えて、組織構成用の名前空間 (Namespace) と構成グループ (Group) も提供します。同じ Group または DataId 構成が異なる名前空間に存在できます。同様に、同じ DataId が異なるグループに存在することができます。

一般に、環境 (dev、sit、uat、prod) を区別するには名前空間を使用し、マイクロサービスまたはプロジェクトを区別するにはグループを使用するのが最善です。Nacos の権限管理は名前空間を制御できますが、グループは制御できません。異なるアカウントは異なる環境に対応し、各環境を分離できます。

Nacos コンソールの dev という名前の名前空間で、springcloud-project という名前のグループとその下に service-01.yml という名前の構成ファイルを作成します。

ここに画像の説明を挿入します

ここに画像の説明を挿入します

ここに画像の説明を挿入します

プロジェクトの下に bootstrap.yml 設定ファイルを作成します

server:
  port: 8000
spring:
  application:
    name: service-01
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8847/nacos
        namespace: 0178e474-2cfb-47c3-bded-da7cfa260f99	# 命名空间id
        group: springcloud-project	# 分组名
        file-extension: yml	# 指定格式
      discovery:
        server-addr: 127.0.0.1:8847/nacos
        namespace: 0178e474-2cfb-47c3-bded-da7cfa260f99	# 命名空间id
        group: springcloud-project	# 分组名

TestCon クラスを作成し、構成値を取得する

@Slf4j
@RestController
public class TestCon {
    
    

    @Value("${test.value}")
    private String testValue;

    @GetMapping("/test/getConfig")
    public void getConfig() {
    
    
        log.info("testValue: {}", testValue);
    }
}

おすすめ

転載: blog.csdn.net/CSDN_handsome/article/details/132132860