Spring Cloudは、Spring Bootに基づくクラウドアプリケーション開発ツールです。構成管理、サービス発見、サーキットブレーカー、インテリジェントルーティング、マイクロエージェント、制御バス、グローバルロック、意思決定キャンペーン、分散セッション、JVMベースのクラウドアプリケーションの開発に関与するクラスター州管理のための簡単な開発方法を提供します。 Spring Boot Styleを通じて複雑な構成と実装原則の再パッケージ化とシールド。最終的には、開発者にシンプルで理解しやすく、展開しやすく、配布されたシステム開発ツールキットを保守しやすくなります。
Spring Cloudには、Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Foundry、Spring Cloud AWS、Spring Cloud Commons、Spring Cloud Commons、Spring Cloud Zookeeper、Spring Cloud CLI、その他のプロジェクトなど、複数のサブプロジェクト(分散システムに関与する複数の異なるオープンソース製品用)が含まれています。
プロジェクトアドレス:https://github.com/yuezhongxin/spring-cloud-consul-sample
ASP.NET Core 2.0&Docker&Consulの実装:https://github.com/yuezhongxin/hellodocker.sample
現在のテストサイトは、ASP.NETコアを使用してConuslとFabioを組み合わせてマイクロサービスクラスターを構築します。各サービス間の通信はHTTP RESTプロトコルに基づいているため、サービスの実装は言語間である可能性があります。 Spring Boot Serviceを開発し、Spring Cloud Consulを使用して既存のクラスターにサービスを登録しましょう。
Java Development Toolは、現在非常によく使用されているIntellij Idea(MacOSインストールチュートリアル)を選択しました(Corer SchemeはシステムのDarcula、Font Size 14を使用しています)、Java SDKには追加のダウンロードとインストールが必要です(バージョン10 Iインストール)。
Intellijのアイデアを初めて使用したため、以下でプロジェクトを詳細に作成するプロセスを投稿します。
まず、プロジェクトを作成します(「Spring Intializr」、Spring Boot Projectを選択)、デフォルトでJava SDK 10を選択します。
次に、プロジェクトの基本情報を入力します(アーティファクトは「Spring-Cloud-Consul-Sample」、その他はデフォルトです):
注:Mavenは、プロジェクトオブジェクトモデル(POM)、依存関係管理モデル、ビルドライフサイクル、およびステージの3つの重要なコンポーネントを含むプロジェクト管理および建設ツールです。
グループIDとアーティファクトIDの違い。グループIDが会社と見なされる場合、Artifact IDは会社部門と見なすことができます。これは、.NETのソリューションとクラスライブラリの関係に多少似ています。たとえば、Spring Cloud ProjectのグループIDはorg.springframework.cloudであり、Spring Cloud ConsulのアーティファクトIDはspring-cloud-starter-consul-discoveryです。
以下は、Spring Bootプロジェクトの作成タイプです(Web依存関係を選択してください):
次に、プロジェクト名とプロジェクトディレクトリに記入します。
次に、「完了」をクリックすると完了します。
ASP.NETコアアプリケーションの開発と同様に、最初にさまざまなパッケージを参照する必要があります。また、スプリングブートプロジェクトにも同じことが言えます。依存関係管理にはMavenを使用するため、 pom.xmlで依存関係を構成し、次のように構成する必要があります。
<parent> groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-parent </artifactid> <バージョン> 2.0.0.release </version> <relative path/> < <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <project.reporting.outputencoding> utf-8 </project.reporting.outputencoding> <java.version> 1.8 </java.version> </propties> <redencies> <redencies> <groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-web </artifactid> </dependency> <依存関係> org.springframework.cloud </groupid> <artifactid> spring-cloud-starter-consul-disovery </artifactid> <groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-actuator </artifactid> <scope> compile </scope> </dependency> <seplency> <ependency> <shipalency> </Dependency> </Dependencies> <DependencyManagement> <Dependencies> <Dependency> <GroupId> org.springframework.cloud </groupid> <artifactid> spring-cloud-consul依存関係</artifactid> <バージョン> 2.0.0.m7 </バージョン> <タイプ> </scope> </scope> </scope> </scope> </dependencies> </DependencyManagement>
参照spring-cloud-starter-consul-discovery Spring Cloud Consulに対応し、参照spring-boot-starter-actuator健康チェック(住所/actuator/health )として使用されます。さらに、アクチュエータはプロジェクトの監視と管理もサポートしています。
ここでノードの役割について話しましょう:
parent :親の参照構成は、親の参照構成を継承します。dependencies :現在の参照構成。親の参照が構成されている場合、子プロジェクトは自動的に参照されます。dependencyManagement :もちろん、参照構成。親の参照が構成されている場合、子プロジェクトは自動的に参照されません。子プロジェクトは、使用した場合にのみ参照する必要があり、バージョン番号は必要ありません。次に、 SpringCloudConsulSampleApplication.javaのコードを投稿します。
パッケージcom.example.springcloudconsulsample; Import org.springframework.beans.factory.annotation.autowired; Import org.springframework.boot.springApplication; Import org.springframework.boot.boot.autoconfigure.springbootlication; Import; org.springframework.web.bind.annotation.requestmapping; Import org.springframework.web.bind.annotation.restController; Import org.springframework.cloud.client.discovery.enablediscoverient; Import org.springframework.cloud.client.discovery.discoveryclient;@enablediscoveryclient@restcontroller@springbootapplicationpublic class springcloudconsampleapplication {@autowired private discoverclient discoverclient; /***すべてのサービスを取得*/@RequestMapping( "/services")public object Services(){return discoveryClient.getServices(); } @RequestMapping( "/home")public string home(){return "hello world"; } public static void main(string [] args){springApplication.run(springcloudconsampleapplication.class、args); }} @EnableDiscoveryClientアノテーションを追加します。プロジェクトが開始されると、現在のスプリングブートサービスが登録されます。
ASP.NETコアを使用してサービスを登録する場合、構成情報はコード(サービス名やポートなどなど、もちろん構成ファイルなど)に入力され、サービスはConsulコンポーネント(Consul HTTP RESTと呼ばれる)を使用して登録されます。
Spring Cloud Consulでサービスを登録する場合、構成ファイルを追加する必要があります(Spring Boot Project Resourceファイルはリソースディレクトリにあります)。
application.propertiesに構成を追加します。
spring.application.name = spring-boot-service
次に、 application.yml構成ファイルを追加します。
次に、application.yml構成ファイルを追加します:debug:trueserver:port:24543spring:cloud:consult:host:127.0.0.1ポート:8500ディスカバリー:登録:登録:true hostname:10.9.10.215 servicename:$ {spring.Application.name} HealthCheckeckPath /Actuator /Health Health CheckEnterval:15S Tagss: urlprefix - /$ {spring.application.name} instanceId:$ {spring.application.name}:$ {vcap.application.instance_id:$ {spring.application.instance_id:$ {random.value}}}}}上記の構成について詳しく説明する必要があります。
debug構成は、デバッグモードのかどうかであり、パッケージ化されて公開されている場合は、 falseに設定する必要があります。server.portスプリングブートサービスのポートを構成します。spring.cloud.consul.host/portローカル領事のアドレスとポートを構成します(サーバーノードとクライアントノードの両方を使用できます)。 Spring Cloud Consulは、Consul HTTP RESTインターフェイスに電話してサービスを登録します。spring.cloud.consul.discovery.true 、開始時にサービスを登録するかどうかを構成します。spring.cloud.consul.discovery.hostname springブートサービスのホストアドレスを構成するか、構成なしで構成できます。デフォルトのローカルアドレスはです。spring.cloud.consul.discovery.serviceName登録済みの領土のサービス名を構成します。 ${spring.application.name}変数は、上記のapplication.properties構成ファイルに追加された構成です。spring.cloud.consul.discovery.healthCheckPath Consul Health Checkの住所を構成します。アクチュエータコンポーネントは、実装に役立つため、追加の実装は必要ありません。住所は、サービスの開始時に印刷情報に表示できます。spring.cloud.consul.discovery.healthCheckInterval 、領事の健康チェック頻度、つまりハートビート頻度を構成します。spring.cloud.consul.discovery.tags consul登録サービスのタグを構成し、 urlprefix-/serviceNameの形式に設定し、Fabioクラスターに自動的に登録されます。spring.cloud.consul.discovery.instanceId Consul登録サービスIDを構成します。上記の作業が完了した後、領事とファビオをローカルに開始する必要があります
次に、Intellij Ideaを使用してプロジェクトを直接デバッグし、 Shift + F9を押してデバッグできます。
上記のアクチュエーターの印刷情報について:
2018-03-28 10:09:54.645 INFO 63482 --- [MAIN] SBAEWBMVENDPOINTHANDLERMAPPING:MAPPED "{[/actuator/health]、methods = java.lang.object org.springframework.boot.actuate.endpoint.web.servlet.abstractwebmvendpointhandlermapping $ operationhandler.handle(javax.servlet.http.httpservletrequest、java.util.
2018-03-28 10:09:54.646 INFO 63482 --- [Main] SBAEWBMVENDPOINTHANDLERMAPPING:マッピング "{[/actuator/info]、methods = java.lang.object org.springframework.boot.actuate.endpoint.web.servlet.abstractwebmvendpointhandlermapping $ operationhandler.handle(javax.servlet.http.httpservletrequest、java.util.
2018-03-28 10:09:54.647 INFO 63482 --- [Main] SBAEWBMVENDPOINTHANDLERMAPPING:マッピング "{[/actuds =、methods= [Get]、produces = application/vnd.spring-boot.actuator.v2+ json | java.util.map <java.lang.string、java.util.map <java.lang.string、org.springframework.boot.actuate.endpoint.web.link >> org.springframework.boot.actuate.endpoint.web.servlet.webmvendpointhandlermapping.links(javax.servlet.http.httpservletrequest、javax.servlet.http.httpservletresponse)
または、Mavenを使用してリリースをパッケージ化し、コマンドでサービスを開始できます。 IntellijのアイデアでMavenを使用してパッケージ化するか、Mavenコマンドを使用してパッケージ化できます。ここでは、Mavenコマンドを使用してパッケージ化します。
Intellijのアイデアをインストールしたとき、Mavenは自動的にインストールされましたが、 mvn -vを直接ヒットすると、コマンドが見つからないことがわかりますので、環境変数を構成する必要があります。
私自身のMavenファイルディレクトリは/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3です。これはIntellij Ideaの構成設定にあります。
$ export m2_home = "/applications/intellij idea.app/contents/plugins/maven/lib/maven3" && export path = $ path:$ m2_home/bin && chmod a+x "/applications/intellij idea.app/contents/plugins/maven/lib/maven3/bin/mvn/mvn
次に、Mavenコマンドが有効かどうかを確認します。
$ MVN -VAPACHE MAVEN 3.3.9(BB52D8502B132EC0A5A3F4C09453C07478323DC5; 2015-11-11T00:41:47+08:00)Maven Home:/Applications/Intellij Idea.App/Contents/Plugins/maven/libmaven/-maven/-maven/-maven/-maven/-maven/-maven.ベンダー:Oracle CorporationJava Home:/library/java/javavirtualmachines/jdk-10.jdk/contents/homedefault Locale:zh_cn_#hans、プラットフォームエンコーディング:UTF-8OS名: "Mac OS X"、バージョン: "10.13.2"
次に、 debug:false in application.ymlを変更し、Mavenを使用してパッケージ化します(ディレクトリをpom.xmlレベルに切り替えます):
$ mvn clean package -dmaven.test.skip = true [info]プロジェクトのスキャン... [情報] [情報] ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Spring-Cloud-Consul-Sample --- [Info]削除/ユーザー/Xishuai/Documents/Project Files/Test Project/Spring-Cloud-Consul-Sample/Target [info] [Info] --- Maven-Resources-Plugin:3.0.1:Resources(Default-Resources) @ Spring-Cloud-Consul-Sample--- [情報]を使用して[情報]コピーを使用します。 0リソース[情報] [info] --- maven-compiler-plugin:3.7.0:compile(default-compile) @ spring-cloud-consul-sample --- [info]変更 - 検出された変更 - ソースファイルを1つのソースファイルにコンパイルします。 Maven-Resources-Plugin:3.0.1:testResources(default-testresources) @ spring-cloud-consul-sample - [info]テストリソースをコピーしない[情報] [情報] --- maven-compiler-plugin:3.7.0:testCompile(default-testcompile) @ spring-consul-sample- [info] - [info] - [info] - [info] Maven-Surefire-Plugin:2.20.1:test(default-test) @ spring-cloud-consul-sample --- [情報]テストがスキップされます。プロジェクト/Spring-Cloud-Consul-Sample/Target/Spring-Cloud-Consul-Sample-0.0.1-Snapshot.jar [info] [info] --- Spring-Boot-Maven-Plugin:2.0.0.Release:Repackage(default) @ spring-consul-sample --- [info] ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- BUILD SUCCESS[INFO] ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
生成されたJARパッケージは、ファイルspring-cloud-consul-sample-0.0.1-SNAPSHOT.jar (フォーマットは项目名+ 版本号)を使用して、ターゲットディレクトリにあり、サービスを直接開始できます。
$ java -jar Target/Spring-Cloud-Consul-Sample-0.0.0.1-Snapshot.jar2018-03-28 10:33:31.750 Info 63875 - [Main] ScaannotationConfigApplicationContext:refsing org.springframework.context日付[3月28日10:33:31 CST 2018];コンテキストのルート階層宣言:違法な反射アクセス操作が発生しています:org.springframework.cglib.core.reflectutils $ 1(jar:file:/users/xishuai/xishuai/documents/projectファイル/テストProject/Spring-Cloud-Consul-Sample/Target/Spring-Cloud-Consul-Sample-0.0.1-snapshot.jar!/boot-inf/lib/spring-core-5.0.4.release.jar!/) java.lang.classloader.defineclass(java.lang.string、byte []、int、int、java.security.protectiondomain)警告:org.springframework.cglib.core.core.reflectutils $ 1warningのエベアンセッツの使用の使用: OperationsWarning:すべての違法アクセス操作は、将来のリリースで拒否されます--- [Main] TrationDelegate $ BeanPostProcessorChecker:Bean 'ConfigurationPropertiesRautoconfiguration' of type [org.springframework.cloud.autoconfigure.configurationPropertiesRebinderautoconfiguration $$ aNANCGLIB $ 4D588Eすべてのbeanpostprocessors(たとえば:自動プロキシの対象ではありません)。 ____ __ _ /// ___'_ __ _ _ _ _(_)_ __ __ __ _ _ / / //(() / ___ | '_ |' _ | / // // // ___)| | _)| | | | | | || (_ | |)))) '| ____ | .__ | _ | | _ | _ | | _/__、| //// ============================================/ _/ _/ _/ :: spring boot ::(v2.0.0.Release)
ヘルスチェックが成功したかどうかを確認してください:
領事サービス登録が成功したかどうかを確認してください。
Fabioクラスターにサービスが含まれているかどうかを確認してください。
サービス登録が成功した後、サービスを手動で発見したり、Spring Cloud Ribbon/Feign Componentを通じてそれを発見したり、ロードバランス関数(Fabio関数と同様)を提供してから、後で研究することができます。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。