Spring Cloud Consult 서비스 등록 및 발견

17518 단어 SpringCloudConsul
Spring Cloud 는 Spring Boot 를 바탕 으로 하 는 클 라 우 드 응용 개발 도구 로 JVM 을 바탕 으로 하 는 클 라 우 드 응용 개발 에 관련 된 설정 관리,서비스 발견,차단기,스마트 경로,마이크로 에이전트,제어 버스,전체 잠 금,결정 경선,분포 식 세 션 과 클 러 스 터 상태 관리 등 조작 에 간단 한 개발 방식 을 제공 했다.Spring Boot 스타일 을 통 해 재 패 키 징 을 통 해 복잡 한 설정 과 실현 원 리 를 차단 하고 최종 적 으로 개발 자 에 게 간단 하고 이해 하기 쉬 우 며 배치 하기 쉬 우 며 유지 하기 쉬 운 분포 식 시스템 개발 도 구 를 남 겼 습 니 다.
Spring Cloud 는 스프링 클 라 우 드 Config,Spring Cloud Netflix,Spring Cloud CloudFoundry,Spring Cloud AWS,Spring Cloud Security,Spring Cloud Commons,Spring Cloud Zookeeper,Spring Cloud CLI 등 여러 개의 하위 프로젝트(분포 식 시스템 에 관련 된 다양한 오픈 소스 제품)를 포함한다.
프로젝트 주소:https://github.com/yuezhongxin/spring-cloud-consul-sample
ASP.NET Core 2.0&Docker&Consult 의 실현:https://github.com/yuezhongxin/HelloDocker.Sample
현재 테스트 사이트 에 서 는 ASP.NET Core 를 Conusl 과 Fabio 와 결합 하여 구축 한 마이크로 서비스 클 러 스 터 를 사용 합 니 다.각 서비스 간 통신 은 HTTP REST 프로 토 콜 을 바탕 으로 하기 때문에 서비스의 실현 은 언어 를 뛰 어 넘 을 수 있 습 니 다.다음은 Spring Boot 서 비 스 를 개발 한 다음 에 Spring Cloud Consul 을 사용 하여 서 비 스 를 기 존의 클 러 스 터 에 등록 합 니 다.
자바 개발 도구 제 가 사용 하 는 IntelliJ IDEA(MacOS 설치 강좌)는 현재 잘 사용 되 고 있 습 니 다(Color Scheme 사용 시스템 의 Darcula,글꼴 크기 14).자바 SDK 는 다운로드 하 다. 을 추가 로 설치 해 야 합 니 다(제 가 설치 한 버 전 10).
IntelliJ IDEA 를 처음 사용 하기 때문에 프로젝트 를 만 드 는 과정 을 자세히 붙 여 보 겠 습 니 다.
우선,프로젝트 생 성("Spring Initializr",Spring Boot 프로젝트 선택),기본 값 으로 Java SDK 10 을 선택 하 십시오.

그 다음 에 항목 의 기본 정 보 를 작성 합 니 다(Artifact 는"spring-cloud-consul-sample"이 고 다른 것 은 기본 입 니 다).

주:Maven 은 프로젝트 관리 와 구축 도구 로 세 가지 관건 적 인 구성 요 소 를 포함 합 니 다.프로젝트 대상 모델(POM),의존 항목 관리 모델,생명 주기 와 단 계 를 구축 합 니 다.
Group ID 와 Artifact ID 의 차 이 는 Group ID 를 회사 로 본다 면 Artifact ID 는 회사 부서 로 볼 수 있 고.NET 의 솔 루 션 과 라 이브 러 리 의 관계 와 유사 하 다.예 를 들 어 Spring Cloud 프로젝트 의 Group ID 는 org.springframework.cloud 이 고 Spring Cloud Consul 의 Artifact ID 는 spring-cloud-starter-consul-discovery 이다.
다음 에 Spring Boot 프로젝트 형식 만 들 기(웹 의존 항목 선택)를 선택 하 십시오.

그리고 항목 이름과 항목 디 렉 터 리 를 작성 합 니 다.

그리고'Finish'를 클릭 하면 완 성 됩 니 다.

ASP.NET Core 애플 리 케 이 션 을 개발 하 는 것 처럼 다양한 패 키 지 를 참조 해 야 합 니 다.Spring Boot 프로젝트 도 마찬가지 입 니 다.Maven 을 사용 하여 의존 관 리 를 하기 때문에 pom.xml 에서 의존 관 계 를 설정 해 야 합 니 다.설정 은 다음 과 같 습 니 다.

<parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>2.0.0.RELEASE</version>
 <relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 <java.version>1.8</java.version>
</properties>

<dependencies>
 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
 </dependency>

 <dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-consul-discovery</artifactId>
 </dependency>

 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
  <scope>compile</scope>
 </dependency>

 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
 </dependency>
</dependencies>

<dependencyManagement>
 <dependencies>
  <dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-consul-dependencies</artifactId>
   <version>2.0.0.M7</version>
   <type>pom</type>
   <scope>import</scope>
  </dependency>
 </dependencies>
</dependencyManagement>
spring-cloud-starter-consul-discovery 에 대응 하 는 Spring Cloud Consul 을 인용 하여 spring-boot-starter-actuator 을 건강 검진(주소 /actuator/health)으로 사용 하고,또 Actuator 는 프로젝트 의 모니터링 과 관 리 를 지원 한다.
여기 서 노드 의 역할 을 다시 말 합 니 다.
  • parent:아버지 가 설정 을 인용 하면 아버지 가 인용 한 설정 을 계승 합 니 다.
  • dependencies:현재 인용 설정 입 니 다.부모 가 설정 을 인용 하면 하위 항목 은 자동 으로 인 용 됩 니 다.
  • dependencyManagement:물론 설정 을 참조 합 니 다.부모 가 설정 을 참조 하면 하위 항목 은 자동 으로 인용 되 지 않 습 니 다.하위 항목 은 사용 할 때 참조 하면 버 전 번 호 를 설정 할 필요 가 없습니다.
  • 그리고 SpringCloudConsulSampleApplication.java 의 코드 를 붙 여 주세요.
    
    package com.example.springcloudconsulsample;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import 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
    @SpringBootApplication
    public 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(SpringCloudConsulSampleApplication.class, args);
     }
    }
    @EnableDiscoveryClient 주 해 를 추가 하고 프로젝트 가 시 작 될 때 현재 Spring Boot 서 비 스 를 등록 합 니 다.
    ASP.NET Core 등록 서 비 스 를 사용 할 때 설정 정 보 는 코드(예 를 들 어 서비스 이름과 포트 등,물론 설정 파일 에서 도 가능)에 작성 한 다음 Consul 구성 요소 등록 서비스(Consul HTTP REST 호출)를 사용 합 니 다.
    Spring Cloud Consul 등록 서 비 스 는 프로필 을 추가 해 야 합 니 다(Spring Boot 프로젝트 자원 파일 은 resources 디 렉 터 리 에 있 습 니 다).application.properties 에 설정 추가:
    
    spring.application.name=spring-boot-service
    
    그리고 application.yml 프로필 추가:
    
        application.yml    :
    
    debug: true
    server:
     port: 24543
    spring:
     cloud:
     consul:
      host: 127.0.0.1
      port: 8500
      discovery:
      register: true
      hostname: 10.9.10.215
      serviceName: ${spring.application.name}
      healthCheckPath: /actuator/health
      healthCheckInterval: 15s
      tags: urlprefix-/${spring.application.name}
      instanceId: ${spring.application.name}:${vcap.application.instance_id:${spring.application.instance_id:${random.value}}}
    위의 설정 은 다음 과 같은 상세 한 설명 이 필요 합 니 다.
  • debug 디 버 깅 모드 를 설정 할 지 여부 입 니 다.패키지 가 발표 되면 false 으로 설정 해 야 합 니 다.
  • server.port 은 Spring Boot 서비스의 포트 를 설정 합 니 다.
  • spring.cloud.consul.host/port 은 로 컬 Consul 의 주소 와 포트(Server 노드 와 Client 노드 모두 가능)를 설정 하고 Spring Cloud Consul 은 Consul HTTP REST 인 터 페 이 스 를 호출 하여 서비스 등록 을 합 니 다.
  • spring.cloud.consul.discovery.true 설정 시작 여부 등록 서비스,
  • spring.cloud.consul.discovery.hostname 은 Spring Boot 서비스의 호스트 주 소 를 설정 하고 설정 하지 않 아 도 됩 니 다.기본 주 소 는 이 컴퓨터 입 니 다.
  • spring.cloud.consul.discovery.serviceName 설정 Consul 에 등 록 된 서비스 이름,${spring.application.name} 변 수 는 위 에 application.properties 설정 파일 에 추 가 된 설정 입 니 다.
  • spring.cloud.consul.discovery.healthCheckPath 은 Consul 건강 검진 주 소 를 설정 하고 Actuator 구성 요소 가 우리 에 게 실현 을 도와 주 었 기 때문에 우 리 는 추가 적 인 실현 이 필요 하지 않 습 니 다.주 소 는 서비스 가 시 작 될 때 인쇄 정보 에서 볼 수 있 습 니 다.
  • spring.cloud.consul.discovery.healthCheckInterval 설정 Consul 건강 검사 빈도,즉 심장 박동 빈도.
  • spring.cloud.consul.discovery.tags 은 Consul 등록 서 비 스 를 설정 하 는 Tags 로 urlprefix-/serviceName 형식 으로 설정 되 어 있 으 며,Fabio 클 러 스 터 에 자동 으로 등 록 됩 니 다.
  • spring.cloud.consul.discovery.instanceId 설정 Consul 등록 서비스 ID.
  • 위의 일 을 다 한 후에 우 리 는 현지에서 Consul 과 Fabio 를 시작 해 야 한다.
    그리고 우 리 는 IntelliJ IDEA 디 버 깅 프로젝트 를 직접 사용 하여 Shift + F9 에 따라 디 버 깅 을 할 수 있다.
    위 에서 언급 한 Actuator 의 인쇄 정보:
    2018-03-28 10:09:54.645 INFO 63482 --- [           main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/health],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map)
    2018-03-28 10:09:54.646  INFO 63482 --- [           main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/info],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map)
    2018-03-28 10:09:54.647  INFO 63482 --- [           main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto protected java.util.Map> org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping.links(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
    또는 Maven 패키지 로 발표 한 다음 명령 으로 서 비 스 를 시작 할 수도 있 습 니 다.IntelliJ IDEA 의 Maven 을 사용 하여 포장 하거나 Maven 명령 으로 포장 해도 됩 니 다.여 기 는 Maven 명령 으로 포장 합 니 다.
    우리 가 IntelliJ IDEA 를 설치 할 때 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"
    그리고 Maven 명령 이 적용 되 는 지 확인 하 세 요:
    
    $ mvn -v
    Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
    Maven home: /Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3
    Java version: 10, vendor: Oracle Corporation
    Java home: /Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home
    Default locale: zh_CN_#Hans, platform encoding: UTF-8
    OS name: "mac os x", version: "10.13.2", arch: "x86_64", family: "mac"
    그 다음 에 우 리 는 application.yml 중의 debug:false 을 수정 하고 Maven 을 사용 하여 포장(디 렉 터 리 를 pom.xml 평 급 으로 전환)합 니 다.
    
    $ mvn clean package -Dmaven.test.skip=true
    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building spring-cloud-consul-sample 0.0.1-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    [INFO]
    [INFO] --- maven-clean-plugin:3.0.0:clean (default-clean) @ spring-cloud-consul-sample ---
    [INFO] Deleting /Users/xishuai/Documents/    /    /spring-cloud-consul-sample/target
    [INFO]
    [INFO] --- maven-resources-plugin:3.0.1:resources (default-resources) @ spring-cloud-consul-sample ---
    [INFO] Using 'UTF-8' encoding to copy filtered resources.
    [INFO] Copying 2 resources
    [INFO] Copying 0 resource
    [INFO]
    [INFO] --- maven-compiler-plugin:3.7.0:compile (default-compile) @ spring-cloud-consul-sample ---
    [INFO] Changes detected - recompiling the module!
    [INFO] Compiling 1 source file to /Users/xishuai/Documents/    /    /spring-cloud-consul-sample/target/classes
    [INFO]
    [INFO] --- maven-resources-plugin:3.0.1:testResources (default-testResources) @ spring-cloud-consul-sample ---
    [INFO] Not copying test resources
    [INFO]
    [INFO] --- maven-compiler-plugin:3.7.0:testCompile (default-testCompile) @ spring-cloud-consul-sample ---
    [INFO] Not compiling test sources
    [INFO]
    [INFO] --- maven-surefire-plugin:2.20.1:test (default-test) @ spring-cloud-consul-sample ---
    [INFO] Tests are skipped.
    [INFO]
    [INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ spring-cloud-consul-sample ---
    [INFO] Building jar: /Users/xishuai/Documents/    /    /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-cloud-consul-sample ---
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 3.815 s
    [INFO] Finished at: 2018-03-28T10:26:46+08:00
    [INFO] Final Memory: 30M/114M
    [INFO] ------------------------------------------------------------------------
    생 성 된 jar 패키지 입 니 다.target 디 렉 터 리 에서 파일 은 spring-cloud-consul-sample-0.0.1-SNAPSHOT.jar(형식 은 + )입 니 다.그리고 서 비 스 를 직접 시작 할 수 있 습 니 다.
    
    $ java -jar target/spring-cloud-consul-sample-0.0.1-SNAPSHOT.jar
    2018-03-28 10:33:31.750 INFO 63875 --- [   main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@2b662a77: startup date [Wed Mar 28 10:33:31 CST 2018]; root of context hierarchy
    WARNING: An illegal reflective access operation has occurred
    WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1 (jar:file:/Users/xishuai/Documents/    /    /spring-cloud-consul-sample/target/spring-cloud-consul-sample-0.0.1-SNAPSHOT.jar!/BOOT-INF/lib/spring-core-5.0.4.RELEASE.jar!/) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
    WARNING: Please consider reporting this to the maintainers of org.springframework.cglib.core.ReflectUtils$1
    WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
    WARNING: All illegal access operations will be denied in a future release
    2018-03-28 10:33:31.971 INFO 63875 --- [   main] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
    2018-03-28 10:33:32.015 INFO 63875 --- [   main] trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$4d45e598] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
    
     . ____   _   __ _ _
     /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
     \\/ ___)| |_)| | | | | || (_| | ) ) ) )
     ' |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::  (v2.0.0.RELEASE)
    건강 검진 성공 여부 보기:

    Consul 이 서비스 등록 성공 여 부 를 확인 합 니 다.

    Fabio 클 러 스 터 에 서비스 가 포함 되 어 있 는 지 확인 하기:

    서비스 등록 이 성공 한 후에 저 희 는 수 동 으로 발견 서 비 스 를 하거나 Spring Cloud Ribbon/Feign 구성 요 소 를 통 해 발견 하고 부하 균형 기능(Fabio 기능 과 유사)을 제공 한 다음 에 연구 할 수 있 습 니 다.
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기