Spring Cloud는 스프링 부팅을 기반으로 한 클라우드 애플리케이션 개발 도구입니다. 구성 관리, 서비스 검색, 회로 차단기, 지능형 라우팅, 마이크로 에이전트, 제어 버스, 글로벌 잠금, 의사 결정 캠페인, 배포 된 세션 및 JVM 기반 클라우드 애플리케이션 개발과 관련된 클러스터 상태 관리를위한 간단한 개발 방법을 제공합니다. Spring Boot 스타일을 통한 복잡한 구성 및 구현 원리를 다시 포장하고 차폐하여 궁극적으로 개발자에게 간단하고 이해하기 쉽고 배포하기 쉬우 며 분산 시스템 개발 툴킷을 쉽게 유지합니다.
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 Core를 사용하여 Conusl과 Fabio를 결합하여 마이크로 서비스 클러스터를 구축합니다. 각 서비스 간의 통신은 HTTP REST 프로토콜을 기반으로하기 때문에 서비스 구현은 교차 언어가 될 수 있습니다. Spring Boot Service를 개발 한 다음 Spring Cloud Consul을 사용하여 기존 클러스터에 서비스를 등록합시다.
현재 매우 잘 사용되는 Java Development Tool I INTELDIJ IDEA (MACOS 설치 자습서)는 현재 매우 잘 사용됩니다 (색 구성표는 시스템의 DARCULA, 글꼴 크기 14를 사용하고 Java SDK는 추가 다운로드 및 설치가 필요합니다 (버전 10 I 설치).
처음으로 Intellij Idea를 사용했기 때문에 아래에 프로젝트를 자세히 작성하는 프로세스를 게시합니다.
먼저 프로젝트를 만들고 ( "Spring Initializr", Spring Boot Project를 선택하고) 기본적으로 Java SDK 10을 선택하십시오.
그런 다음 프로젝트의 기본 정보를 작성합니다 (Artifact는 "Spring-Cloud-Consul-Sample"이고 다른 것은 기본값입니다).
참고 : Maven은 프로젝트 객체 모델 (POM), 종속성 관리 모델, 빌드 라이프 사이클 및 단계의 세 가지 주요 구성 요소를 포함하는 프로젝트 관리 및 건설 도구입니다.
그룹 ID와 아티팩트 ID의 차이점. Group ID가 회사로 간주되면 Artifact ID는 회사 부서로 간주 될 수 있으며 .NET의 솔루션과 클래스 라이브러리 간의 관계와 다소 유사합니다. 예를 들어, Spring Cloud Project의 그룹 ID는 org.springframework.cloud 이며 Spring Cloud 영사의 아티팩트 ID는 spring-cloud-starter-consul-discovery 입니다.
다음은 Spring Boot Project 유형 생성입니다 (웹 종속성 선택) :
그런 다음 프로젝트 이름과 프로젝트 디렉토리를 작성하십시오.
그런 다음 "마무리"를 클릭하면 완료되었습니다.
ASP.NET Core 응용 프로그램을 개발하는 것과 같이 먼저 다양한 패키지를 참조해야하며 Spring Boot 프로젝트에 대해서도 마찬가지입니다. 종속성 관리에 maven을 사용하기 때문에 pom.xml 의 종속성을 구성하고 다음과 같이 구성해야합니다.
부 <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <project.reporting.outputencoding> utf-8 </project.reporting.outputencoding> <java.version> 1.8 </java.version> </properties> <pelovemencies> <groupid> org.springframework.boot </groupid> <artifactid> Spring-boot-starter-web </artifactid> </fectionement> <pectionement> <groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-starter-consul-discovery </appifactid> <groupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-actuator </artifactid> <scope> compile </scope> </dependency> <groupId> org.springframewort.boot.boot.boot <artifactid> spring-bboot-starter-test- </dependency> </dependencies> <pectionencyManagement> <pectionies> <pectionency> <groupid> org.springframework.cloud </groupid> <artifactid> spring-cloud-consul-delfections </artifactid> <버전> 2.0.0.0.m7 </verse> pom </type> 수입 </scope> </fecondency> </dependencies> </fectionencyManagement>
기준 spring-cloud-starter-consul-discovery 스프링 클라우드 영사에 해당하며 기준 spring-boot-starter-actuator 건강 검사 (주소 /actuator/health )로 사용됩니다. 또한 액추에이터는 프로젝트 모니터링 및 관리도 지원합니다.
여기에서 노드의 역할에 대해 이야기 해 봅시다.
parent : 부모 참조 구성은 부모 참조 구성을 상속합니다.dependencies : 현재 참조 구성. 상위 참조가 구성되면 하위 프로젝트가 자동으로 참조됩니다.dependencyManagement : 물론 참조 구성. 상위 참조가 구성되면 하위 프로젝트는 자동으로 참조되지 않습니다. 하위 프로젝트는 사용될 때만 참조되면 버전 번호가 필요하지 않습니다. 그런 다음 SpringCloudConsulSampleApplication.java 코드를 게시하십시오.
package com.example.springcloudconsulsultsample; import org.springframework.beans.beans.annotation.autowired; import org.springframework.springApplication; import org.springframework.boot.autoconfigure.springbootapplication; 가져 오기; org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.restcontroller; import org.springframework.cloud.client.discovery.enablediscoveryclient; import org.springframework.cloud.client.discovery.discoveryclient;@enablediscoveryclient@restcontroller@springbootapplicationpublic class springCloudConsulsAmpleApplication {@autowired private discoveryClient DiscoveryClient; /*** 모든 서비스 받기*/@requestmapping ( "/services") public Object Services () {return discoveryclient.getServices (); } @requestmapping ( "/home") public string home () {return "Hello World"; } public static void main (String [] args) {springApplication.run (springCloudConsulsAmplepplication.class, args); }} @EnableDiscoveryClient 주석을 추가하십시오. 프로젝트가 시작되면 현재 스프링 부팅 서비스가 등록됩니다.
ASP.NET Core를 사용하여 서비스를 등록하면 구성 정보가 코드 (예 : 서비스 이름 및 포트 등)에 채워지고 물론 구성 파일에있을 수도 있음)가 구성 요소 (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 : Consult : Host : Host : 127.0.0.1 포트 : 8500 Discovery : Register : True Hostname : 10.9.10.215 ServiceName : $ {Spring.application.Name} HealthCheckPath : /Actuator /Health Health Health CheckeCeckinterval : 15S 태그 : 15 urlpRefix-/$ {spring.application.name} instanceid : $ {spring.application.name} : $ {vcap.application.instance_id : $ {spring.application.instance_id : $ {random.value}}}위의 구성에 대해 자세히 설명해야합니다.
debug 구성은 디버그 모드 여부이며, 패키지 및 게시되면 false 로 설정해야합니다.server.port Spring Boot Service의 포트를 구성합니다.spring.cloud.consul.host/port 로컬 영사의 주소와 포트를 구성합니다 (서버 노드 및 클라이언트 노드 모두를 사용할 수 있음). Spring Cloud Consul은 서비스를 등록하기 위해 영사 HTTP REST 인터페이스를 호출합니다.spring.cloud.consul.discovery.true 시작시 서비스 등록 여부를 구성합니다.spring.cloud.consul.discovery.hostname Spring Boot Service의 호스트 주소를 구성하거나 구성없이 구성 할 수 있으며 기본 로컬 주소는입니다.spring.cloud.consul.discovery.serviceName 등록 된 영사의 서비스 이름을 구성합니다. ${spring.application.name} 변수는 위의 application.properties 구성 파일에 추가 한 구성입니다.spring.cloud.consul.discovery.healthCheckPath 영사 건강 검사 주소를 구성합니다. 액추에이터 구성 요소는이를 구현하는 데 도움이되므로 추가 구현이 필요하지 않습니다. 주소는 서비스가 시작될 때 인쇄 정보에서 볼 수 있습니다.spring.cloud.consul.discovery.healthCheckInterval 컨설럽 건강 검사 빈도, 즉 심장 박동 주파수를 구성합니다.spring.cloud.consul.discovery.tags 영사 등록 서비스의 태그를 구성하고 urlprefix-/serviceName 의 형식으로 설정하고 Fabio 클러스터에 자동으로 등록됩니다.spring.cloud.consul.discovery.instanceId 구성하는 컨소시트 등록 서비스 ID를 구성합니다.위의 작업이 완료된 후에도 현지에서 영사와 Fabio를 시작해야합니다.
그런 다음 Intellij Idea를 사용하여 프로젝트를 직접 디버깅하고 Shift + F9 눌러 디버그 할 수 있습니다.
위에서 언급 한 액추에이터의 인쇄 정보 :
2018-03-28 10 : 09 : 54.645 정보 63482 --- [main] sbaewswebmvccendpointhandlermping : mappped "{[/actuator/Health], methods= [get], produces= [application/vnd.spring-boot.actuator.v2+json || on on on on on on on onton | java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-03-28 10 : 09 : 54.646 정보 63482 --- [main] sbaewswebmvccendpointhandlermping : mapped "{[/actuator/info], methods= [get], productes= [application/vnd.spring-boot.actuator.v2+json | java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-03-28 10 : 09 : 54.647 정보 63482 --- [main] sbaewswebmvccendpointhandlermping : mapped "{[/actuator], methods=], produces= [appplication/vnd.spring-boot.actuator.v2+json || json/json]. java.util.map <java.lang.string, java.util.map <java.lang.string, org.springframework.actuate.endpoint.web.link >> org.springframework.actuate.endpoint.web.servlet.servlet.webmvvercendpointhandlermping.links (javax.servlet.http.httpservletrequest, javax.servlet.http.httpervletresponse)
또는 Maven을 사용하여 릴리스를 포장하고 명령으로 서비스를 시작할 수 있습니다. Intellij 아이디어에서 Maven을 사용하여 패키지를 만들거나 Maven 명령을 사용하여 패키지를 사용할 수 있습니다. 여기서 우리는 Maven 명령을 사용하여 패키지를 사용합니다.
Intellij Idea를 설치하면 Maven이 자동으로 설치되었지만 mvn -v 직접 적용하면 명령을 찾을 수 없으므로 환경 변수를 구성해야합니다.
내 자신의 maven 파일 디렉토리는 /Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3 입니다. 이것은 Intellij Idea의 구성 설정에서 찾을 수 있으며 다음 명령을 실행합니다.
$ export m2_home = "/applications/eloptij idea.app/contents/plugins/maven/lib/maven3"&& 내보내기 경로 = $ 경로 : $ m2_home/bin && chmod a+x "/applications.app/contents/plugins/maven/lib/maven3/bin/mvn/mvn/bin/mvn/bin/mvn/bin/mvn/bin/mvn/bin/mvn/bin/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/lib/maven3Java version: 10, 공급 업체 : Oracle Corporationjava 홈 : /library/java/javavirtualmachines/jdk-10.jdk/contents/homedefault locale : zh_cn_#hans, 플랫폼 인코딩 : UTF-8OS 이름 : "Mac OS X", 버전 : "10.13.2", 아치 : "X86_64", Mac "
그런 다음 debug:false in application.yml 수정하고 Maven을 사용하여 패키지를 사용합니다 (디렉토리를 pom.xml 레벨로 전환) :
$ mvn clean package -dmaven.test.skip = true [정보] 프로젝트 스캔 ... [info] [info] -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------. -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------. Spring-Cloud-Consul-Sample --- [Info] 삭제/사용자/Xishuai/documents/documents/project 파일/테스트 프로젝트/스프링 클라우드-콘술 샘플/target [info] --- maven-resources-plugin : 3.0.1 : 리소스 (기본 소송) @ 스프링 클라우드-소송 샘플 --- [utf-8 'encoding to popored resources] 0 리소스 복사 [info] [info] --- Maven-Compiler-Plugin : 3.7.0 : Compile (기본 컴파일) @ Spring-Cloud-Consul-Sample --- [Info] 변경 사항 -Mods Recomping! Maven-Resources-Plugin : 3.0.1 : testResources (default-testresources) @ spring-cloud-consul-sample --- [info] 테스트 자료를 복사하지 않음 [info] [info] --- maven-compiler-plugin : 3.7.0 : testcompile (default-testcompile) @ spring-doud-consul-sample-- [info]-정보]-[info]-정보]. Maven-Surefire-Plugin : 2.20.1 : 테스트 (기본 테스트) @ Spring-Cloud-Consul-Sample --- [Info] 테스트가 건너 뜁니다. [Info] [Info] --- Maven-Jar-Plugin : 3.0.2 : Jar (기본 -Jar) @ Spring-Cloud-Consul-Sample --- [info] jar/xishuai/Test/Test/Test/Test/Test/Test. 프로젝트/스프링 클라우드-콘술사 샘플/대상/스프링 클라우드 콘술사 샘플 -0.0.1-snapshot.jar [info] [info] --- 스프링 보트-마이븐-플러그 인 : 2.0.0. release : repackage (기본값) @ 스프링 클라우드-콘술사 샘플 --- [info] ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- BUILD SUCCESS[INFO] ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
생성 된 JAR 패키지는 spring-cloud-consul-sample-0.0.1-SNAPSHOT.jar (형식은项目名+ 版本号)와 함께 대상 디렉토리에 있습니다. 그런 다음 직접 서비스를 시작할 수 있습니다.
$ java -jar target/spring-cloud-consul-sample-0.0.1-SNAPSHOT.jar2018-03-28 10:33:31.750 INFO 63875 --- [ main] scaAnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@2b662a77: startup 날짜 [Wed 3 월 28 일 10:33:31 CST 2018]; 컨텍스트의 루트 계층 구조 및 불법 반사 액세스 작업이 발생했습니다. 프로젝트/스프링-클라우드-헌법--대상/스프링-클라우드-콘술 샘플 -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, int, int, java.security.protection.protectiondomain) 경고 : org.springframework.cglib.core.reflectutils $ 1warning의 관리자에게 이것을보고하는 것을 고려하십시오. Access OperationsWarning : 모든 불법 액세스 작업은 향후 릴리스 2018-03-28 10 : 33 : 31.971 정보 63875 --- [Main] FaautowiredannotationBeanPostProcessor : JSR-330 'Javax.inject.Inject'Founds Found 및 Autowiring2018-03-018 10 : 33 : 33 : 33 : 32.015에 대한 지원 63875 --- [Main] TrationDelegate $ BeanPostProcessOrchecker : Bean 'ConfigurationPropertiesRebinderoUtoconfiguration'of Type [org.springframework.cloud.autoconfigure.configurationPropertiesRebinderaUtoconFiguration $$ Entervyspring-infereal for for even eNiGlipirecgrity. 모든 BeanPostProcessors에서 처리 받기 (예 : 자동 임박 할 자격이 없음). ____ __ _ /// ___'_ __ __ _ _ (_) _ __ __ __ / / // (() / ___ | '_ |'_ | / // // ___) | | _) | | | | | | || (_ | |)))) '| ____ | .__ | _ | | _ | _ | | _/__, | //////// ========================================= ___/ =/ _/ _/ :: 스프링 부츠 :: (v2.0.0. Release)
건강 점검이 성공했는지 확인하십시오.
영사 서비스 등록이 성공했는지 확인하십시오.
Fabio 클러스터에 서비스가 포함되어 있는지 확인하십시오.
서비스 등록이 성공한 후에는 서비스를 수동으로 발견하거나 스프링 클라우드 리본/Feign 구성 요소를 통해이를 발견하고로드 밸런싱 함수 (Fabio 기능과 유사)를 제공 한 다음 나중에 연구 할 수 있습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.