ナコスの紹介
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
スタートアップ クラスで使用して、@NacosPropertySource
springboot-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);
}
}