Nacos 登録センター

まずソフトウェアをインストールする必要があります。公式ウェブサイト (英語): https://nacos.io/en/

ポートは conf/application.properties ファイルで変更できます。デフォルトは 8848 です。

サービスに登録する

親プロジェクトに管理依存関係を追加する

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.6.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

Eureka の依存関係をコメントアウトし、Nacos クライアントの依存関係を追加します。

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

application.yml を修正し、Nacos アドレスを追加し、Eureka アドレスをコメントします。

spring:
  cloud:
    nacos:
      server-addr: localhost:8848

Nacos を始める

startup.cmd -m standalone
# 単一マシンの起動パラメータ

http://localhost:8848/nacos/ にアクセスすると、ログイン アカウントとパスワードは両方とも nacos になります。

階層型ストレージモデル

サービスは複数のクラスターに分割され、各クラスターには複数のインスタンスがあり、クラスターはリージョンごとに割り当てられ、アクセス速度が向上します。

対照的に、Eureka にはサービスインスタンスのみがあり、クラスターはありません。

サービスを呼び出すときは、クラスター間の呼び出しの方が待機時間が長くなるため、可能な限りローカル クラスター内のサービスを選択してください。ローカルクラスタにアクセスできない場合は、他のクラスタにアクセスする

application.yml でクラスタを設定できます

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: Shanghai # クラスター名

次に Ribbon 戦略を Nacos に設定する

# マイクロサービスの負荷分散ルールを設定します。ここでは userService サービスです。
userService:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
#    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.Nac # 負荷分散ルール

次に、Nacos でインスタンスの重み (0-1) を設定できます。重みが大きいほど、アクセス頻度が高くなります。

環境隔離

Nacos のサービスストレージとデータストレージの最外層は、名前空間と呼ばれるもので、最外層の分離に使用されます。

Nacos に dev などの新しい名前空間を作成し、application.yml を修正することができます。

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: Shanghai # クラスター名
        namespace: UUID # 名前空間のUUIDは次のとおりです

異なる名前空間内のサービスは相互に表示されず、アクセスできません。

一時インスタンスと非一時インスタンス

一時的なインスタンスの場合、Nacos は Eukera と同じ方法で処理します。

一時的でないインスタンスの場合、Nacos はアクティブにインスタンスが稼働中かどうかを問い合わせます。サービスが利用できない場合は削除されません。サービスが利用できない場合、Nacos は積極的に消費者に通知します。

非一時的インスタンスの設定

spring:
  cloud:
    nacos:
      discovery:
        ephemeral: false # 非一時インスタンスとして設定

Nacos 構成管理

マイクロサービスのデプロイインスタンスが増えると、一つ一つ構成を変更するのは非常に面倒です。Nacos を使用すると、構成を一元管理し、ホットアップデートを行うことができます。

シンプルな使い方

Nacos コンソールの設定管理で、新しい設定を作成します。ここで、Data ID は、[サービス名]-[プロファイル].[サフィックス名] の形式の設定ファイルの ID です (例: userService-dev.yaml)。

次に、設定コンテンツに設定を記述します。たとえば、

pattern: 
  dateformat: yyyy-MM-dd HH:mm:ss

Nacos 構成管理クライアント依存関係の紹介

<!--nacos 構成管理依存関係-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

取得を構成する手順

プロジェクトの起動 -> bootstrap.yml -> Nacos 構成ファイル -> ローカル application.yml -> Spring コンテナの作成 -> Bean のロード

bootstrap.yml を追加する

spring:
  application:
    name: userService # サービス名
  profiles:
    active: dev # 開発環境、こちらが dev です 
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos住所
      config:
        file-extension: yaml # ファイル拡張子

テスト

@RestController
@RequestMapping("/user")
public class UserController{
    
    @Value("${pattern.dateformat}")
    private String dateformat;
    
    @GetMapping("/now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat))
    }
}

効果を確認するにはページをご覧ください

ホットアップデート

これは2つの方法で達成できる

方法1: @Value によって注入された変数が配置されているクラスにアノテーション @RefreshScope を追加する

@RefreshScope // 自動更新の設定
@RestController
@RequestMapping("/user")
public class UserController{
    
    @Value("${pattern.dateformat}")
    private String dateformat;
    
    @GetMapping("/now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat))
    }
}

方法 2: @ConfigurationProperties を使用する

新しい構成クラスを作成する

@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}

Controller クラス

// @RefreshScope // 自動更新の設定
@RestController
@RequestMapping("/user")
public class UserController{
    
    // @Value("${pattern.dateformat}")
    // private String dateformat;
    
    @Autowired
    private PatternProperties properties;
    
    @GetMapping("/now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(properties.getDateformat()))
    }
}

共有の構成

マイクロサービスが起動すると、Nacos から複数の設定ファイルを読み取ります。

  • [spring.application.name]-[spring.profiles.active].yaml,例えば:userService-dev.yaml

  • [spring.application.name].yaml,例えば:userService.yaml

2番目の [spring.application.name].yaml には環境が含まれていないため、複数の環境で共有できます。

設定の優先順位: [spring.application.name]-[spring.profiles.active].yaml > [spring.application.name].yaml > ローカル設定

This post is licensed under CC BY-NC-SA 4.0 by the author.
最終更新 2025-02-05 17:37 +0900

Hugo で構築されています。 | テーマ StackJimmy によって設計されています。