まずソフトウェアをインストールする必要があります。公式ウェブサイト (英語): 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
> ローカル設定