概要
今要件があるとします:
当社のアプリケーションは10マシンに展開されています。特定の構成パラメーターを調整するとき、マシンを再起動する必要はありません。 10台のマシンが最新の構成を自動的に取得できます。
それを達成する方法は?次のような多くの種類があります。
1.構成をデータベースに配置し、アプリケーションがDBから構成を直接読み取るたびに配置します。このようにして、DBを変更し、最新の構成情報をデータベースに更新するだけです。このように、いくつのアプリケーションが同じDBから構成情報を取得するため、最新の構成を自然に取得できます。
2。各マシンは、構成情報を更新するUpdateConfigインターフェイスを提供します。構成を変更する必要がある場合、サーバーのUpdateConfigインターフェイスは1つずつ呼ばれます。
3. Redisを使用して実装し、Redisに構成情報を配置しますが、このようにして、より多くのネットワークリクエストがある毎回読む必要があります。
上記の3つの方法は、最も簡単に考えるのが簡単で、簡単ですが、もちろん多くの欠点があります。多くの欠点がありますが、一部の従来の企業はこれを行っています。
インターネット企業では、基本的にこのように遊んでいる人を見たことはありません。彼らはすべて分散構成センターを使用しています。オープンソースを使用するか、自分で実装してください。現在、多くのオープンソース分散構成センターがあり、Spring Cloud Configが最適です。次に、Spring Cloud Configを使用して、分散構成センターを実装します。
最新のSpring Boot 2.0バージョンを使用するかどうか
以前は、最新のSpring Cloud 2.0を使用して、構成センターである分散デモを行いました。私はそれが簡単だと思ったが、それを成し遂げるのに一日かかった。いくつかの理由があります:
1.スプリングクラウドの対応するドキュメントは完全に更新されておらず、問題があり、ドキュメントには見つかりません。
2.現在、バージョン2.0を使用する企業はほとんどなく、インターネット上に特定の実用的な記事はありません。問題が発生した後、バイドゥは解決策を見つけることができませんでした。 Googleがソリューションを見つけることは基本的に困難です。これらはすべて散発的な知識の断片です。
3. 2.0バージョンでは、構成とバスにいくつかの小さな変更があり、1.5.xバージョンに従ってまだ実行されていない場合、機能しません。
上記の理由に基づいて、1.5.xバージョンを使用してより信頼できるようにすることをお勧めします。次の記事を次のバージョンで紹介します。
春のブーツ:
1.5.2.Release
対応するスプリングクラウドは次のとおりです。
Dalston.Release
Spring Cloud Config Serverを構築します
Spring Cloud Configで均一に構成を管理したいだけで、当面の間、構成センターで高度に利用可能になりたくない場合は、構成とバスのコンポーネントのみが必要です。ただし、高可用性を確保する場合は、Spring Cloudの登録発見コンポーネントも使用する必要があります。
構成とバスに加えて、Gitも使用する必要があります。 Spring Cloud Configはバージョン管理にGitを使用しているためです。
Spring Cloud Configに基づいて構成センターを作成するのは非常に簡単で、ほんの少しの小さなステップで行われます。
【1 infoct構成コンポーネントとバスコンポーネントを導入します
<Dependency> groupId> org.springframework.cloud </groupid> <artifactid> spring-cloud-config-server </artifactid> </dependency> <dependency> groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-starter
【2】スタートアップクラスでは、@enableconfigserverアノテーションを使用しています
spring.cloud.config; Import org.springframework.boot.springApplication; Import org.springframework.boot.autoconfigure.springframework.cloud.config.Server.EnableConfigserver; configApplication {public static void main(string [] args){springApplication.run(configApplication.class、args); }}【3】アプリケーション.ymlファイルは、rabbitmqおよびgitリポジトリを構成します
サーバー:ポート:8040SPRING:アプリケーション:名前:Spring-Cloud-Config-Serverクラウド:config:config:server:git:uri:https://gitlab.xxxxx.com/config/xxxxxx.git Search-paths:username:username:xxxxxパスワード:xxxxxx:127.0.0.0.0.0.ゲスト管理:セキュリティ:有効:false
バスコンポーネントがクライアントに通知するためにそれを使用する必要があり、構成の変更が行われるため、RabbitMQは構成されています。また、使用することを忘れないでください
管理:セキュリティ:有効:false
検証は閉じられ、次の操作は常に承認エラーを報告します。
サーバー構成センターが完成しました。これで、サーバーで小さな実験を行い、Demo-dev.propertiesファイルを送信できます。ファイルのコンテンツは次のとおりです。
アドレス=こんにちは
次に、使用します
http:// localhost:8040/demo/dev
出力の場合
{"address": "hello"}これは、Spring Cloud ConfigとGitの間の相互作用がOKであることを意味します。
クライアントアクセス構成センター
私たちの目標:
構成情報が変更され、GITに送信された後、Spring Cloud Configに接続されているすべてのクライアントはすぐに通知を受信し、最新の構成情報を取得します。
以下は、この目標を達成する方法について説明します。
クライアントは、アクセスアクションを完了するためにいくつかの小さな手順を実行する必要があります。
【1 dependence依存関係を導入します
<依存関係> groupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter-web </artifactid> </dependency> <dependency> groupid> org.cloud </groupid> <artifactid> spring-config </artifactid> </artifactid> </artifactid> </artifactid> <groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-starter-config </artifactid> </dependency> <dependency> org.springframework.cloud </groupId> <artifactid> spring-cloud-starter-bus-amqp </artifactid> </depency>
Spring-Boot-Starter-Webの導入は、実験用です。
【2】rabbitmqを構成し、構成センターにURLを導入します
Application.Properties
spring.application.name = spring-cloud-config-client1server.port = 8042management.security.enabled = falsespring.rabbitmq.host = 127.0.0.1spring.rabbitmq.port = 5672spring.rabbitmq.username = guest.rabbitmq.password = guest.rabbitmq.password
bootstrap.properties
spring.cloud.config.name = demospring.cloud.config.profile = devspring.cloud.config.label = masterspring.cloud.config.uri = http:// localhost:8040/
注意を払うべき3つのポイントがあります:
1。閉鎖検証:management.security.enabled = false
2。スプリングクラウドに関連する構成は、bootstrap.propertiesに配置する必要があります
3. spring.cloud.config.uriを使用して、構成センターのアドレスを指定します
さらに、クライアントの場合、スタートアップクラスでは、構成とバスに関連する注釈を追加する必要はありません。
このクライアントに到達した後、コントローラーを使用して実験を開始できます。
springcloudconfig.client; Import org.springframework.beans.factory.annotation.value; import org.springframework.cloud.context.config.annotation.refreshscope; Import org.springframework.web.bind.annotation.Requestmapping; Import org.springframework.web.bind.annotation.restcontroller;@restcontroller@refreshscopepublic class hellocontroller {@value( "$ {address}")private stringアドレス; @RequestMapping( "/address")public string getaddress(){return this.address; }}上記のHelloControllerがアドレス構成を使用する必要があると仮定すると、@RefreshScopeと@Value Annotationsを使用するだけです。
@RefreshScopePublicクラスHellocontroller {} @value( "$ {address}")プライベート文字列アドレス;クライアントが最新の構成情報を取得できるかどうかを確認するには、
@RequestMapping( "/address")public string getaddress(){return this.address; }方法。
Demo-dev.propertiesファイルを変更し、値を変更しましょう
アドレス=ハローアップデート
gitに送信します。この時点で、getAddressインターフェイスを呼び出します
http:// localhost:8041/address
最新の価値が得られなかったことがわかりました。これは、GITへのプッシュアクションが完了した後、Spring Cloud Busに通知しなかったためです。郵便配達員を使用してPOSTリクエストを行い、次のインターフェイスに電話してバスに通知できます。
http:// localhost:8040/bus/refresh
このインターフェイスが正常に呼ばれると、バスはRabbitMQを使用して、構成が更新されていることをすべてのクライアントに通知します。
特別な注意:
クライアントの /バス /リフレッシュインターフェイスではなく、サーバーの /バス /更新インターフェイスを呼び出しています。
送信するたびに /バス /バス /更新インターフェイスをサーバー上で呼び出す必要がある場合、これは面倒です。 WebHookを使用して役立ちます。
新しいgitlabを使用している場合は、プロジェクトの[設定]をクリックしてから、[統合]をクリックしてWebhookをセットアップする必要があります。
Configuration Centerサーバーの /バス /更新インターフェイスアドレスにURLを入力し、[webhookの追加]をクリックします。
CtripのApolloとの比較
Spring Cloud Configの絶妙なことは、その構成がGitに保存されていることです。これは、構成の変更、許可、バージョン、その他の問題を自然に分離します。この設計により、Spring Cloudは全体的に非常にシンプルになりますが、ご不便をおかけします。
簡単な要約をしてみましょう:
| 機能ポイント | アポロ | Spring Cloud Config | 述べる |
|---|---|---|---|
| 構成インターフェイス | 1つのインターフェイスは、異なる環境と異なるクラスター構成を管理します | なし、gitを介して動作する必要があります | |
| 有効時間を構成します | リアルタイム | 再起動が有効であるか、手動の更新が有効になります | Spring Cloud ConfigはGit Webhookに合格する必要があり、さらにリアルタイム効果をサポートするための追加のメッセージキューが必要です |
| バージョン管理 | リリース履歴およびロールバックボタンは、インターフェイスに直接提供されます | なし、gitを介して動作する必要があります | |
| グレースケールリリース | サポート | サポートされていません | |
| 承認、監査、監査 | インターフェイスで直接サポートされ、修正と公開許可の分離をサポートします | GITリポジトリを介して設定する必要があり、変更をサポートし、許可の分離をリリースしません | |
| インスタンス構成監視 | 現在どのクライアントがどの構成を使用しているかを簡単に確認できます | サポートされていません | |
| パフォーマンスを取得するための構成 | 高速、データベースを介したアクセス、およびキャッシュサポート | 遅く、Gitクローンリポジトリから読み、ファイルシステムから読む必要があります | |
| クライアントサポート | すべてのJavaおよび.NETアプリケーションをネイティブにサポートし、APIを提供して他の言語アプリケーションをサポートし、Spring Annotationをサポートして構成を取得します | Springアプリケーションをサポートし、構成を取得するための注釈を提供します | Apolloには、より広範なアプリケーションがあります |
個人的には、Spring Cloud Configを使用することをお勧めします。これは、コミュニティで非常に軽量でアクティブなものです。問題に遭遇したときに解決策を見つけるのは簡単です。さらに、ApolloとSpring Cloudの構成の違いは、インターフェイスがないことだけだと個人的に考えています。インターフェイスを実行でき、Gitを使用して実行できますが、ユーザーエクスペリエンスはそれほど良くありません。
要約します
上記は、この記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。