Spring Cloud Consult 서비스 등록 및 발견
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.그리고 우 리 는 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
또는 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 기능 과 유사)을 제공 한 다음 에 연구 할 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.