序文
オンラインプロジェクトの大規模化に伴い、各プロジェクトにはさまざまな設定ファイルが散在し、分散開発モデルを採用すると、サービスの増加に応じて必要な設定ファイルも増え続けます。基本的なサービス情報が変更されると、一連の更新と再起動が発生し、運用と保守が悲惨になり、エラーが発生しやすくなります。このような問題を解決するために誕生したのがコンフィグレーションセンターです。
マイクロサービス構成を一元管理する理由
マイクロサービス アーキテクチャでは、マイクロサービスの構成管理には通常、次の要件があります。
- 構成を一元管理します。マイクロサービス アーキテクチャを使用するアプリケーション システムには数百または数千のマイクロサービスが含まれる場合があるため、集中管理が非常に必要です。
- 環境が異なれば構成も異なります。開発、テスト、ステージング、実稼働用にさまざまな構成ファイルがあります。
- 動作中に動的に調整できます。
- 構成は変更後に自動的に更新されます。再起動は必要ありません。
構成の概要
Spring Cloud Config プロジェクトは、分散システム用の構成管理ソリューションです。これには、クライアントとサーバーの 2 つの部分が含まれています
Server 提供配置文件的存储、以接口的形式将配置文件的内容提供出去
。Client通过接口获取数据、并依据此数据初始化自己的应用
Spring Cloud は使用 git 或 svn 存放配置文件
デフォルトで git を使用し、コードとして git を使用してそれを示します。
クイックスタート
GITリポジトリを構築する
まず、github 上に設定ファイルを格納するフォルダー config-server を作成し、本番環境をシミュレートするために、次の 3 つの設定ファイルを作成します。
// 开发环境
application-dev.properties
// 测试环境
application-test.properties
// 生产环境
application-pro.properties
そして、次のようなキーと値のペアが各構成ファイルに書き込まれますprofile=dev-1.0、profile=test-1.0、profile=pro-1.0
。
同時に、 という名前の新しいブランチを作成しますconfig-server-v2.0
。
サーバ側
-
新しいプロジェクトを作成して依存関係を追加する
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
-
スタートアップ クラスを変更して
Application.java
、@EnableConfigServer
それが構成センター サーバーであることを宣言します。@SpringBootApplication @EnableConfigServer public class ConfigApplication { public static void main(String[] args) { SpringApplication.run(ConfigApplication.class, args); } }
-
設定ファイルを書き込む
application.yml
server: port: 7376 spring: application: name: config cloud: config: server: git: # 配置git仓库的地址 uri: # git仓库用户名 username: # git仓库密码 password:
-
打ち上げ後にテスト。まず、サーバーが github 上の構成情報を読み取り、以下に直接アクセスできるかどうかをテストする必要があります。
http://localhost:7376/applicatiom/pro
返される情報は次のとおりです。
{ name: "applicatiom", profiles: [ "pro" ], label: null, version: "0dc8f44a675ab935b919962e294edcd864ed6306", state: null, propertySources: [ { name: "https://github.com/Sun-xyu/config-server.git/application-pro.properties", source: { profile: "pro-1.0" } } ] }
上記で返される情報には構成ファイルが含まれており
位置、版本、配置文件的名称以及配置文件中的具体内容
、サーバーが git ウェアハウスの構成情報を正常に取得したことを示します。構成ファイル内の構成情報を直接表示する場合は、次のようにアクセスして
http://localhost:7376/applicatiom-dev.properties
、次を返すことができます。profile: dev-1.0
ブランチの構成ファイル内の構成情報を直接表示する場合は、次のようにアクセスして
http://localhost:7376/config-server-v2.0/applicatiom-dev.properties
、次を返すことができます。profile: dev-2.0
構成ファイル applicatiom-dev.properties に構成情報を次のように追加し
config: this is config server dev1.0
、ブラウザで再度アクセスしてhttp://localhost:7376/applicatiom-dev.properties
、次を返しますconfig: this is config server dev1.0
profile: dev-1.0
。サーバーが最新の送信されたコンテンツを自動的に読み取ることを説明します -
ウェアハウス内の構成ファイルは Web インターフェースに変換され、アクセスは次のルールを参照できます。
/{application}/{profile}[/{label}] /{application}-{profile}.yml /{label}/{application}-{profile}.yml /{application}-{profile}.properties /{label}/{application}-{profile}.properties
application-dev.properties
例としては、application
、、、です。クライアントは、入力されたパラメータに従って、対応する設定を読み取ることを選択します。application
profile
dev
label
master
クライアント
-
新しいプロジェクトを作成して依存関係を追加する
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
-
通常の起動クラスを作成します
Application.java
。@SpringBootApplication public class ConfigclientApplication { public static void main(String[] args) { SpringApplication.run(ConfigclientApplication.class, args); } }
-
構成ファイルを作成するには、2 つの構成ファイルを構成する必要があります
application.properties
。application.propertiesbootstrap.properties
は次のとおりです。server: port: 7377 spring: application: name: config-client
bootstrap.properties は次のとおりです。
spring: application: # 对应config server 的配置文件的{application} name: client cloud: config: # 对应config server 地址 uri: http://localhost:7376 # 对应config server 所获取的配置文件的 {profile} profile: dev # 指定git仓库的分支,对应获取配置文件的{lable} label: master
- spring.application.name : {application} 部分に対応します
- spring.cloud.config.profile: {profile} 部分に対応
- spring.cloud.config.label: git のブランチに対応します。構成センターがローカル ストレージを使用する場合、このパラメータは役に立ちません。
- spring.cloud.config.uri: 構成センターの特定のアドレス
- spring.cloud.config.discovery.service-id: 構成センターのサービス ID を指定します。これは、高可用性構成クラスターに簡単に拡張できます。
特別な注意: 構成部分のコンテンツを正しくロードできるように、上記の Spring-cloud 関連のプロパティを bootstrap.properties で構成する必要があります。これは、関連する config 構成が application.properties より前に行われ、bootstrap.properties のロードも application.properties より前に行われるためです。
-
テストクラスを作成します。@Value アノテーションを使用してサーバー側パラメータの値を取得します
@RestController public class ConfigClientController { @Value("${config}") private String config; @GetMapping("/config") public String helloConfig(){ return config; } }
-
テスト、ブラウザアクセス
http://localhost:7377/config
、リターンthis is config server dev1.0
。git リポジトリの設定を読み取ります。これは、パラメータがサーバーから正しく取得されたことを意味します。この時点で、完全なサーバーが構成サービスを提供し、クライアントが構成パラメーターを取得する例が完了します。
まとめ
コンフィグレーションセンターに関する例を説明します。「Submit to github, visit in the browser」application-dev.properties
で構成情報を手動で変更すると、取得した情報が古いパラメータのままであることを示す「return:」が返されます。これはなぜですか? SpringBoot プロジェクトは起動時にのみ構成ファイルの値を取得するため、github 情報を変更した後、クライアント側で再度取得できなくなり、この問題が発生します。この問題を解決するにはどうすればよいでしょうか? 次回は詳しくご紹介します。config=this is config server dev1.0 commit again
http://localhost:7377/config
this is config server dev1.0