目次
1. Linux インストール パッケージ モードの単一ノードのインストールと展開
2. Nacos は SpringBoot を統合してサービスの登録と検出を実現します
3. ユーザーモジュール(user-module)を作成します。
4. ユーザーモジュールをnacosにマイクロサービスとして登録する
3) Feign の使用 (オーダーモジュールオーダーの作成)
5. Fegin の依存関係をユーザー モジュールの pom ファイルに追加します
6. スタートアップクラスのユーザーモジュールに Fegin アノテーションを追加します
7. ユーザー モジュールの偽インターフェイスを作成し、Fegin を使用してマイクロサービス呼び出しを実装します。
8. コントローラーが呼び出して検証を開始します (ユーザー サービスが注文サービスを呼び出します)。
1. サービスの登録と検出の概要
サービスの登録と検出は、マイクロサービス アーキテクチャの中核コンポーネントの 1 つです。その主な役割は、サービスとサービス インスタンスの情報を管理し、サービス利用者が必要なサービスを提供するサービス インスタンスを動的に見つけられるようにすることです。
マイクロサービス アーキテクチャでは、ビジネス サービスが複数のマイクロサービスに分割され、各サービスが相互に通信して全体の機能を完了します。さらに、単一障害点を回避するために、マイクロサービスは高可用性のクラスター モードでデプロイされ、クラスター サイズが大きいほどパフォーマンスが向上します。サービス コンシューマーは、複数のサービス プロバイダーで構成されるクラスターを呼び出す必要があります。
まず、サービス コンシューマは、サービス プロバイダ クラスタの各ノードのリクエスト アドレスをローカル構成ファイルに保持する必要があります。次に、サービス プロバイダー クラスター内のノードがオフラインになるかダウンした場合、リクエストがダウンしたノードに送信されてリクエストが発生するのを防ぐために、サービス コンシューマーのローカル構成でノードのリクエスト アドレスを同期的に削除する必要があります。失敗する。
このような問題を解決するには、主に以下の機能を持つサービス登録センターの導入が必要です。
-
サービスアドレスの管理。
-
サービス登録。
-
サービスの動的な認識。
1. 共通登録センター
このような機能を実現するコンポーネントは、ZooKeeper、Eureka Consul、Etcd、Nacos など多数あります。この章では主にアリババのNacosについて紹介します。
-
Eureka: Netflix のオープンソース サービス登録および検出コンポーネント。Spring Cloud はそれを統合して、すぐに使えるサービス登録および検出機能を提供します。
-
Consul: HashiCorp が開発したサービス グリッド ソリューションである Consul の一部で、サービスの登録と検出、構成管理、サービスの監視などの機能を提供します。
-
Zookeeper: Apache のトップレベル プロジェクトは、変更プッシュをサポートし、サービスの登録および検出コンポーネントとして適したツリー タイプのディレクトリ サービスです。
-
etcd: CoreOS によって開発された、分散型で信頼性の高いキーと値のストレージ。サービスの登録と検出のためのストレージ メディアとしても一般的に使用されます。
-
Nacos: Nacos は、クラウドネイティブ アプリケーションの構築が容易な、動的なサービス検出、構成管理、およびサービス管理プラットフォームです。これは Spring Cloud Alibaba のコンポーネントの 1 つであり、サービス登録の検出とサービスの構成を担当し、nacos=eureka+config と見なすことができます。
2. サービスの登録と検出の基本プロセスは次のとおりです。
-
サービス開始時に、指定の登録センターに自身の情報を登録します。情報には、サービス名、ネットワーク アドレス、ポート番号などが含まれます。
-
サービス利用者は、登録センターから必要なサービス情報を取得し、サービスを提供するすべてのサービス インスタンスのリストを取得します。
-
サービス コンシューマは、特定の負荷分散戦略に基づいてサービス インスタンスを選択し、呼び出しを開始します。
-
サービス インスタンスが停止すると、サービス インスタンス自体の情報が登録センターにログアウトされます。
-
登録センターは、インスタンスの変更情報をコンシューマーにプッシュします。
3. サービスの登録と検出の主な利点は次のとおりです。
-
サービス利用者はサービス インスタンスのアドレスをハードコーディングする必要がなく、レジストリは疎結合を実現するサービス プロキシとして機能します。
-
サービスプロバイダーは、消費者に影響を与えることなく柔軟に拡張できます。登録センターは変更情報を消費者にプッシュします。
-
サービスの監視と管理は簡単で、登録センターを通じてシステム内にどのサービスとそのインスタンスがあるかを確認できます。
-
これはグレー スケール リリースの実現に役立ち、登録センターのインスタンス トラフィックを制御してスムーズなアップグレードを実行できます。
2. アリババナコスの紹介
Nacos は、Alibaba がオープンソース化した動的なサービス検出、構成管理、およびサービス管理プラットフォームであり、クラウドネイティブ アプリケーションの構築を容易にします。Spring Cloud Alibaba マイクロサービス エコシステムの重要なコンポーネントとして、主に次の機能を提供します。
-
サービス ディスカバリとサービス ヘルス モニタリング: DNS ベースおよび RPC ベースのサービス ディスカバリをサポートし、リアルタイムのサービス ヘルス モニタリングを提供します。
-
動的構成サービス: 集中構成と分散構成の 2 つのモードをサポートし、構成変更をリアルタイムでプッシュできます。
-
サービス管理: サービス オーケストレーション管理、サービス分離、重み管理などのサービス管理機能を提供します。
3.Nacosの基本的な使い方
1. Linux インストール パッケージ モードの単一ノードのインストールと展開
Nacos には 3 つの展開モードがあります。
-
スタンドアロン モード: テストおよび開発環境の場合、クラスターはサポートされません。
-
クラスター モード: 運用環境で使用され、クラスターの展開をサポートし、高可用性を保証します。
-
マルチデータセンター モード: マルチデータセンターのシナリオで使用され、データセンター間展開をサポートし、最大限の災害復旧を保証します。
注: Nacos は Java 環境に依存するため、JDK1.8 以降の使用が必要です。
Nacos をインストールするには 2 つの方法があります。1 つはソース コードのインストール、もう 1 つはコンパイルされたインストール パッケージを直接使用する方法です。ここでは、インストールパッケージを使用してインストールすることを選択します。
1.JDKのインストール設定
1) Linux に JDK をインストールして構成するには、次の手順が必要です。 JDK と JRE がシステムにインストールされているかどうかを確認します。次のコマンドで確認できます。
[root@localhost /]# java -version
2) JDK と JRE がシステムにインストールされていない場合は、JDK をダウンロードしてインストールする必要があります。Oracle 公式 Web サイトを参照して、システムに適した JDK インストール パッケージをダウンロードします。ダウンロード リンク: Java ダウンロード | Oracle。インストール パッケージが /opt/jdk-11.0.11_linux-x64_bin.tar.gz であるとします。インストールパッケージを解凍します。次のコマンドが使用できます。
tar -zxvf /opt/jdk-11.0.11_linux-x64_bin.tar.gz -C /opt/
3) 環境変数を設定します。/etc/profile ファイルを開きます。
sudo vi /etc/profile
4) ファイルの最後に以下を追加します。
export JAVA_HOME=/opt/jdk-11.0.9
export PATH=$JAVA_HOME/bin:$PATH
5) ファイルを保存して終了します。次のコマンドを実行して、構成ファイルをすぐに有効にします。
source /etc/profile
6) JDK が正常にインストールされ、構成されていることを確認します。次のコマンドが使用できます。
java -version
このコマンドを実行すると、インストールされている JDK のバージョン情報が表示されるはずです。
2.nacosのインストール
2) Nacos インストールパッケージを解凍します。
tar -zxvf nacos-server-2.2.2.tar.gz
解凍が完了すると、解凍されたディレクトリに nacos フォルダーが表示されます。
3) Nacos の設定
解凍された nacos ディレクトリに入り、conf/application.properties ファイルを変更します。
# 启用standalone模式(这个没有请自己添加)
nacos.standalone=true
# 修改端口号
server.port=8848
# 修改数据存储位置(XXX.XXX.XXX.XXX是网络中属性的IPv4地址,设置正确的数据库及用户名和密码)
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://XXX.XXX.XXX.XXX:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=your-db-username
db.password=your-db-password
4) Nacos サービスを開始し、nacos ルート ディレクトリに入り、次のコマンドを実行します。
[root@bogon nacos]# sh bin/startup.sh -m standalone
これにより、Nacosサービスが開始されます。起動プロセス中にエラーが発生した場合は、ログ ディレクトリにあるstartup.log ファイルを表示して、特定のエラー情報を確認できます。
「grpcSdkServer」という名前の Bean の作成中にエラーが発生しました: init メソッドの呼び出しに失敗しました。ネストされた例外は java.io.IOException です: アドレス 0.0.0.0/0.0.0.0:9848 へのバインドに失敗しました
私はこのエラーを当時報告しましたが、常にポート 9848 に関するものでした。
2つの方法を試してみました。
1. サービスをシャットダウンします: [root@localhost bin]# sh shutdown.sh サービスを再起動してみてください。
2. 別の単語がある場合、それは設定ファイル /nacos/conf/application.properties の問題です。
5) Nacos サービスにアクセスします (xxx.xxx.xxx.xxx は ip a コマンドを使用して IP アドレスを表示します) Nacos のデフォルトのアクセス アドレスはhttp://xxx.xxx.xxx.xxx:8848/nacosです。ブラウザに入力されたこのアドレスは、Nacos サービスにアクセスするために使用されます。すべてが正常であれば、Nacos ログイン インターフェイスが表示され、デフォルトのアカウント (nacos) とパスワード (nacos) を入力してログインします。
これまでのところ、Nacos は正常にインストールされています。
この時点で、次の問題が見つかります。
権限認証をスキップし、ログインせずに入力でき、以前書いたブログを読むことができます:認証を有効にする
2. Nacos は SpringBoot を統合してサービスの登録と検出を実現します
1.親プロジェクトを作成する
Mavenプロジェクトを作成し、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>org.example</groupId>
<artifactId>BK-SpringCloud</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.6.11</version>
</parent>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.4.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
2. 基本公開モジュール(共通)の作成
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">
<parent>
<artifactId>BK-SpringCloud</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>alibaba-common</artifactId>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.15</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
</project>
3. ユーザーモジュール(user-module)を作成します。
ステップ:
1 モジュールのインポート依存関係を作成する
<?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">
<parent>
<artifactId>BK-SpringCloud</artifactId>
<groupId>org.example</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>alibaba-user</artifactId>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>alibaba-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
2 SpringBootメインクラスの作成
@SpringBootApplication
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class,args);
}
}
3 yml設定ファイルを追加する
spring:
application:
name: user-server
datasource:
druid:
url: jdbc:mysql://localhost:3306/nacos?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
4. ユーザーモジュールをnacosにマイクロサービスとして登録する
次に、alibaba-user モジュールのコードの変更を開始し、nacos サービスに登録します。
1) nacos 依存関係を pom.xml に追加します。
<!--nacos客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2) @EnableDiscoveryClient アノテーションをメインクラスに追加します
@SpringBootApplication
@EnableDiscoveryClient
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class,args);
}
}
3) nacos サービスのアドレスを application.yml に追加します
spring:
application:
name: user-server
datasource:
druid:
url: jdbc:mysql://localhost:3306/user?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
cloud:
nacos:
discovery:
username: nacos
password: nacos
server-addr: 192.168.177.129:8848
4) サービスを開始し、nacos コントロール パネルに登録されたユーザー マイクロサービスがあるかどうかを確認します。
4. Feignに基づくサービスコールの実現
1) ふりとは何ですか
Feign は、マイクロサービス間の呼び出しを容易にする宣言型 Web サービス クライアントです。Feign は、Ribbon と Hystrix を内部でカプセル化し、負荷分散機能とサービス フォールト トレランス機能を備えています。
Feign の主な機能は、インターフェイスを作成し、アノテーションを追加することによって、他のマイクロサービスを呼び出すことです。このインターフェイスを使用して他のマイクロサービスを呼び出し、Ribbon と Hystrix を組み合わせて負荷分散とサービス フォールト トレランスを実現することで、リモート呼び出しの複雑さを大幅に簡素化します。
Feign を使用する主な利点は次のとおりです。
-
サービス呼び出しの複雑さを隠す: Feign はインターフェイスを定義することで宣言的な方法でサービスを呼び出します。これにより、開発者がサービスを直接呼び出すプロセスが簡素化されます。
-
負荷分散機能付き: Feign にはリボン負荷分散クライアントが組み込まれており、サービス呼び出しの負荷分散を実現できます。
-
サービス フォールト トレラント機能: Feign には、Hystrix サービス フォールト トレラント コンポーネントが組み込まれており、サービス呼び出し時のサービスの低下やサービスの融合などのサービス フォールト トレラント機能を実現できます。
-
複数のサービス呼び出しメソッドのサポート: Feign には、拡張性の高い HTTP、TCP、およびその他のサービス呼び出しメソッドが組み込まれています。
-
リクエスト再試行メカニズムを使用すると、指定された再試行時間内にサービス呼び出しを再試行して、サービス呼び出しの安定性を向上させます。
-
GZIP 圧縮のサポート: GET リクエストの送信時に、リクエストとレスポンスの GZIP 圧縮をサポートし、ネットワーク伝送効率を向上させます。
-
ロギングのサポート: Feign は、サービス呼び出しのデバッグと追跡に便利な、ロギングのための SLF4J の使用をサポートしています。
主な使用手順:
-
偽の依存関係を追加する
-
サービスインターフェースを作成し、 @FeignClient アノテーションを追加します
-
インターフェイスを使用してサービスを直接呼び出す
-
サービス呼び出しのタイムアウト、再試行などを構成する
-
サービスのダウングレード フォールバック クラスを定義し、サービスが利用できない場合にデフォルトのダウングレード値を返します。
2) 負荷分散とは何を意味しますか?
ロード バランシングは、ワークロードを複数のコンピューティング リソースに分散することにより、コンピューティング リソースの利用効率を最大化するコンピュータ テクノロジです。
分散システムでは、複数のサービス インスタンスを展開することで、サービスの高可用性とスケーラビリティを実現できます。ロードバランサを介して、クライアントのリクエストをサービスインスタンス間で分散し、負荷のバランスのとれた分散と管理を実現します。
テスト: 2 人のユーザーを開始し (ポートを変更し、コントローラー メソッドでコンテンツを変更)、インターフェイスを介して互換性のないコンテンツにアクセスします。
3) Feign の使用 (オーダーモジュールオーダーの作成)
1. 注文モジュールを作成し、依存関係を導入する
<?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">
<parent>
<artifactId>SpringCloudAlibaba</artifactId>
<groupId>com.buba</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>order</artifactId>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.buba</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--nacos客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
</project>
2. スタートアップ クラスにアノテーションを追加する
@SpringBootApplication
@EnableDiscoveryClient
public class OrderApp {
public static void main( String[] args ) {
SpringApplication.run(OrderApp.class, args);
}
}
3.ymlファイル構成
spring:
application:
name: order-server
datasource:
druid:
url: jdbc:mysql://localhost:3306/nacos?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
cloud:
nacos:
discovery:
username: nacos
password: nacos
server-addr: 192.168.177.129:8848
server:
port: ${random.int[0000,9999]}
4. OrderController を作成する
@RestController
@RequestMapping("order")
public class OrderController {
@RequestMapping("/get1")
public Integer get1(){
return 111;
}
}
5. Fegin の依存関係をユーザー モジュールの pom ファイルに追加します
<dependencies>
<dependency>
<groupId>com.buba</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--nacos客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
6. スタートアップクラスのユーザーモジュールに Fegin アノテーションを追加します
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients//开启Fegin
public class UserApp {
public static void main( String[] args ) {
SpringApplication.run(UserApp.class, args);
}
}
7. ユーザー モジュールの偽インターフェイスを作成し、Fegin を使用してマイクロサービス呼び出しを実装します。
@FeignClient(value = "order-server",path = "/order")//声明调用的提供者的name
public interface OrderFeign {
// 指定调用提供者的哪个方法
// @FeignClient+@GetMapping 就是一个完整的请求路径 http://serviceproduct/product/{pid}
@GetMapping("/get1")
Integer get1();
}
8. コントローラーが呼び出して検証を開始します (ユーザー サービスが注文サービスを呼び出します)。
@RestController
@RequestMapping("user")
public class UserController {
@Resource
private OrderFeign orderFeign;
@RequestMapping("/get1")
public Integer get1(){
return orderFeign.get1();
}
}
五、Nacosドメインモデル部門
1. 名前空間の分割
NameSpace (デフォルトの NameSpace は「public」で、NameSpace はリソース分離を実行できます。たとえば、開発環境の NameSpace 下のサービスは、本番環境の NameSpace 下のマイクロサービスを呼び出すことはできません)
(1) ネームスペースを作成する
開発開発環境
テスト テスト環境
実稼働前環境
(2) マイクロサービスの名前空間を構成する
spring:
application:
name: order-server
cloud:
nacos:
discovery:
server-addr: 192.168.177.129:8848
namespace: 9f5444ba-f5a0-4745-99aa-e15e8cca08cd
2. グループ分け
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.177.129:8848
group: group2
6. ログの設定
1. ローカルログの設定
方法 1:
(1) ログレベルの設定
注: このクラスには @Configuration アノテーションがありません
public class FeginConfig {
@Bean
public Logger.Level feignLoggerLevel(){
return Logger.Level.FULL;
}
}
(2) ターゲットフェイグの設定
@FeignClient(value = "repository-server",path = "/repositoty",configuration = FeginConfig.class)
public interface RepositotyFeign {
@GetMapping("/getNum/{goodId}")
Integer getNum(@PathVariable("goodId") Integer goodId);
}
方法2
feign:
client:
config:
repository-server:
loggerLevel: debug
2. グローバルログ設定
(1) 設定ファイルの追加
注: このクラスには @Configuration アノテーションがあります
@Configuration
public class FeginConfig {
@Bean
public Logger.Level feignLoggerLevel(){
return Logger.Level.FULL;
}
}
(2) springbootのログレベルを下げる
logging:
level:
com.buba.feign: debug
7、Nacos の統合構成管理
1. 構成センターが必要な理由
構成センターは、システムの隅々に構成情報を配布する従来の方法とは異なり、個々のサーバーを 1 台ずつ管理する必要がなく、システム内の構成ファイルを集中管理します。そうすることでどのようなメリットがあるのでしょうか?
(1) コンフィグレーションセンターにより、コンフィグレーションの標準化、フォーマットの統一が可能
(2) 構成情報が変更されると、その変更はリアルタイムに反映され、サーバーを再起動することなく、対応する変更を自動的に感知でき、新しい変更は対応するプログラムに一律に送信され、変更に迅速に対応します。たとえば、特定の機能は特定の地域のユーザーのみが使用でき、特定の機能は大規模なプロモーション期間中にのみ利用可能ですが、コンフィグレーション センターを使用した後は、関係者のみがコンフィグレーション センターでパラメータを動的に調整する必要があり、基本的にリアルタイムでも準リアルタイムでも構いませんので、対応する業務に合わせて調整してください。
(3)監査機能により問題点の追跡も可能
2. 一般的に使用される構成センター
マイクロサービスにおけるコンフィグレーションセンターにはNacos、Apollo、Config+Busの3つの主流ソリューションがありますが、ここでは主にNacosのコンフィグレーションセンターとしての使い方を紹介します。
Nacos のいくつかのコンセプト
ネームスペース(ネームスペース) ネームスペースは、異なる環境の構成を分離するために使用できます。一般に、環境は名前空間構成グループ(グループ) に分割されます。 構成グループは、異なるサービスを同じグループに分類するために使用されます。一般に、プロジェクトの構成は、一連の構成セット(データ ID) に分割されます。システムでは、通常、構成ファイルは構成セットです。一般的なマイクロサービスの構成は構成セットです
3. Nacos 構成センターの使用
nacos を構成センターとして使用すると、実際には nacos をサーバーとして扱い、各マイクロサービスをクライアントとして扱うことになり、各マイクロサービスの構成ファイルを nacos に保存し、各マイクロサービスが nacos から構成をプルすることができます。
(1) プロパティの形式
1. 依存関係をインポートする
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
2. 構成センター + 番号で新しい構成を作成します
3. 設定ファイル名の変更
プロジェクト内の application.yml を bootstrap.yml に変更します。
4. マイクロサービスに nacos config サービス アドレスの設定を追加します
5. 登録センターの構成を取得するためのテスト
@RestController
@RequestMapping("user")
public class UserController {
@Value("${author}")
private String author;
@RequestMapping("/get1")
public String get1(){
return author;
}
}
6. データベースの構成を構成センターに移動し、プロジェクト内のデータ ソースの構成を変更できます。
spring.datasource.druid.url=jdbc:mysql://localhost:3306/nacos?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.username=root
spring.datasource.druid.password=123456
もちろん、構成センターが構成されている場合は、yml ファイルから削除されます。
7. 新しい構成クラス
@Configuration
public class DataSourceConfig {
@Value("${spring.datasource.druid.username}")
private String username;
@Value("${spring.datasource.druid.password}")
private String password;
@Value("${spring.datasource.druid.url}")
private String url;
@Value("${spring.datasource.druid.driver-class-name}")
private String driverClassName;
@Bean
public DataSource dataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setUrl(url);
druidDataSource.setUsername(username);
druidDataSource.setPassword(password);
druidDataSource.setDriverClassName(driverClassName);
return druidDataSource;
}
}
dataSource を取得するかどうかをテストするポイントを中断できます。
(2) yaml形式
1. 構成センターで新しい構成を作成します
2. プロジェクト設定ファイル名を bootstrap.yml に変更し、設定ファイルの構成を変更します
(3) profiles.active - 粒度設定
1. 構成センターで構成を作成します。
データID:サービス名-プロファイルN名.サフィックス名(order-server-mysql.yaml)
2. エンジニアリングモジュール構成
spring:
application:
name: user-server
cloud:
nacos:
discovery: # 服务注册与发现
username: nacos
password: nacos
server-addr: 192.168.177.129:8848
config: # 配置中心
username: nacos
password: nacos
server-addr: 192.168.177.129:8848
file-extension: yaml
group: group1 # 分组
namespace: 9f5444ba-f5a0-4745-99aa-e15e8cca08cd # 命名空间
profiles:
active: mysql # 粒度配置
server:
port: ${random.int[1000,9999]}
feign:
client:
config:
default: # 全局,如果单个服务,写服务名称即可(user-server)
#建立连接所用的时间,适用于网络状况正常的情况下,两端连接所需要的时间
connect-timeout: 5000
#指建立连接后从服务端读取到可用资源所用的时间
read-timeout: 5000
(4) カスタム拡張機能のData Id設定(共有設定)
マイクロサービスの数が増えると必然的に同じ構成が存在しますが、その際、クラスター内のデータソース情報やログ構成情報、nacosなど、同じ構成をプロジェクト内の共通構成として抽出することができます。 1 つの構成センターに複数の構成セットを書き込む方法がサポートされています。
事例紹介:
1. データ ID redis.yaml と mysql.yaml を持つ 2 つの新しいファイルを nacos に作成します。
2. 構成コンテンツを構成ファイルに追加します。
redis.yaml
mysql.yaml
** 3. 次の nacos 構成を Springboot プロジェクトに追加します。 **
yml 設定全体:
spring:
application:
name: user-server
cloud:
nacos:
discovery: # 服务注册与发现
username: nacos
password: nacos
server-addr: 192.168.177.129:8848
config: # 配置中心
username: nacos
password: nacos
server-addr: 192.168.177.129:8848
file-extension: yaml
extension-configs[0]: # 多个 Data Id的配置
data-id: redis.yaml
group: DEFAULT_GROUP # 默认为DEFAULT_GROUP
refresh: true # 是否动态刷新,默认为false
extension-configs[1]:
data-id: mysql.yaml
group: DEFAULT_GROUP # 默认为DEFAULT_GROUP
refresh: true # 是否动态刷新,默认为false
# group: group1 # 分组
# namespace: 9f5444ba-f5a0-4745-99aa-e15e8cca08cd # 命名空间
profiles:
active: mysql # 粒度配置
ヒント 1: 複数のデータ ID が同時に設定されている場合、それらの優先順位関係は spring.cloud.nacos.config.ext-config[n].data-id となり、n の値が大きいほど優先順位が高くなります。
ヒント 2: spring.cloud.nacos.config.ext-config[n].data-id の値にはファイル拡張子が必要です。ファイル拡張子は、プロパティと yaml/yml の両方をサポートできます。現時点では、 spring.cloud.nacos.config.file-extension の構成は、カスタム拡張機能構成のデータ ID ファイル拡張子には影響しません。
(5) 優先順位
Nacos Config は現在、Nacos から関連構成を取得するための 4 つの構成機能を提供しています。
A: spring.cloud.nacos.config.shared-configs[0].dataids を通じて複数の共有データ ID 構成をサポートします。
B: spring.cloud.nacos.config.extension-configs[0].data-id を通じて複数の拡張データ ID の構成をサポートする
C: アプリケーション名 user-server.yaml アプリケーション構成
D: アプリケーション名 + プロファイル user-server-dev.yaml の詳細な構成
# 優先順位: 詳細設定 > アプリケーション設定 > extension-configs[n] 設定 (n が大きいほど優先度が高くなります) >shared-configs[n] 設定 (n が大きいほど優先度が高くなります) D > C > B > A
(6) 動的構成の更新
アノテーション方法(推奨)
@RestController
@RefreshScope // 在需要动态读取配置的类上添加此注解就可以(动态配置刷新)
@RequestMapping("/nacos-config")
public class NacosConfigController {
@Value("${config.appName}")
private String appName;
//2 注解方式
@GetMapping("/test")
public String nacosConfingTest() {
return appName;
}
}