SpringCloud Eureka 서비스 등록 실현 과정
SpringBoot 애플 리 케 이 션 이 Spring Cloud 환경(Greenwich.SR3 버 전)에 등록 하려 면 절차 가 간단 합 니 다.
pom.xml 에 실행 기 추가:spring-cloud-starter-netflix-eureka-client;
추가 설정:eureka.client.serviceUrl.defaultZone:http://localhost:8100/eureka/;
응용 프로그램 시작 하기;
등록 센터 가 정상 이면 등록 센터 에서 이 앱 을 발견 할 수 있 습 니 다.아래 그림 의 빨 간 상자 와 같 습 니 다.
spring.factories 의 설정 에 따라 Eureka Client AutoConfiguration 의 설정 은 모두 유효 합 니 다.다음 코드 가 되 돌아 오 는 bean 을 포함 합 니 다.
@Bean
public DiscoveryClient discoveryClient(EurekaInstanceConfig config, EurekaClient client) {
return new EurekaDiscoveryClient(config, client);
}
spring 용기 가 초기 화 될 때 모든 단일 bean 을 예화 합 니 다.Eureka Client AutoConfiguration 의 discovery Client 방법 을 실행 하여 이 bean 인 스 턴 스 를 가 져 옵 니 다.그래서 Eureka Discovery Client 대상 을 만 들 었 습 니 다.EurekaDiscoveryClient 의 구조 방법 에 주의 하 십시오.두 번 째 입 참 은 com.netflix.discovery.EurekaClient 유형 입 니 다.이 대상 은 EurekaClient AutoConfiguration 류 에서 왔 습 니 다.다음 과 같은 방법 입 니 다.
@Bean(destroyMethod = "shutdown")
@ConditionalOnMissingBean(value = EurekaClient.class, search = SearchStrategy.CURRENT)
@org.springframework.cloud.context.config.annotation.RefreshScope
@Lazy
public EurekaClient eurekaClient(ApplicationInfoManager manager, EurekaClientConfig config, EurekaInstanceConfig instance) {
manager.getInfo(); // force initialization
return new CloudEurekaClient(manager, config, this.optionalArgs,this.context);
}
CloudEureka Client 의 부모 클래스 com.netflix.discovery.Discovery Client 는 넷 플 릭 스 가 발표 한 eureka-client 패키지 에서 왔 기 때문에 이렇게 이해 할 수 있 습 니 다.Eureka Discovery Client 류 는 대리 신분 입 니 다.진정한 서비스 등록 발견 은 넷 플 릭 스에 의뢰 한 오픈 소스 패키지 입 니 다.저 희 는 SpringCloud 가 제공 하 는 서비스 등록 발견 기능 을 열심히 사용 할 수 있 습 니 다.Eureka Discovery Client 만 알 면 됩 니 다.진정한 서 비 스 는 eureka-client 로 이 루어 집 니 다.다음은 com.netflix.discovery.Discovery Client 의 구조 방법 에 주목 해 야 한다.이 안 에는 서비스 등록 의 논리 가 있 기 때문에 전체 구조 방법의 내용 이 너무 많 기 때문에 모두 자세히 볼 필요 가 없고 관건 적 인 코드 만 보면 된다.
Discovery Client 의 구조 방법 중 가장 익숙 한 것 은 아래 그림 의 빨 간 상자 에서 이 로그 가 출력 된 것 입 니 다.
다음 빨간색 상자 와 같은 응용 프로그램 시작 로그 에 이 로그 출력 이 있 습 니 다.
빨 간 상자 에 있 는'us-east-1'은 기본 region 입 니 다.설정 류 Eureka Client ConfigBean 에서 왔 습 니 다.이 안 에는 각종 eureka 와 관련 된 설정 정보 와 기본 설정 이 있 습 니 다.다음 그림 과 같 습 니 다.
DiscoveryClient 의 구조 방법 을 계속 보 세 요.서비스 등록 과 관련 된 initScheduled Tasks 방법 이 여기 서 호출 되 었 습 니 다.다음 그림:
initScheduled Tasks 방법의 내용 은 다음 과 같 습 니 다.중국어 주석 에 주의 하 십시오.
private void initScheduledTasks() {
//
if (clientConfig.shouldFetchRegistry()) {
//
int registryFetchIntervalSeconds = clientConfig.getRegistryFetchIntervalSeconds();
int expBackOffBound = clientConfig.getCacheRefreshExecutorExponentialBackOffBound();
//
scheduler.schedule(
new TimedSupervisorTask(
"cacheRefresh",
scheduler,
cacheRefreshExecutor,
registryFetchIntervalSeconds,
TimeUnit.SECONDS,
expBackOffBound,
new CacheRefreshThread() //
),
registryFetchIntervalSeconds, TimeUnit.SECONDS);
}
if (clientConfig.shouldRegisterWithEureka()) {
//
int renewalIntervalInSecs = instanceInfo.getLeaseInfo().getRenewalIntervalInSecs();
int expBackOffBound = clientConfig.getHeartbeatExecutorExponentialBackOffBound();
// , :Starting heartbeat executor: renew interval is: 30
logger.info("Starting heartbeat executor: " + "renew interval is: " + renewalIntervalInSecs);
//
scheduler.schedule(
new TimedSupervisorTask(
"heartbeat",
scheduler,
heartbeatExecutor,
renewalIntervalInSecs,
TimeUnit.SECONDS,
expBackOffBound,
new HeartbeatThread() //
),
renewalIntervalInSecs, TimeUnit.SECONDS);
// Runable
instanceInfoReplicator = new InstanceInfoReplicator(
this,
instanceInfo,
clientConfig.getInstanceInfoReplicationIntervalSeconds(),
2); // burstSize
statusChangeListener = new ApplicationInfoManager.StatusChangeListener() {
@Override
public String getId() {
return "statusChangeListener";
}
@Override
public void notify(StatusChangeEvent statusChangeEvent) {
if (InstanceStatus.DOWN == statusChangeEvent.getStatus() ||
InstanceStatus.DOWN == statusChangeEvent.getPreviousStatus()) {
// log at warn level if DOWN was involved
logger.warn("Saw local status change event {}", statusChangeEvent);
} else {
logger.info("Saw local status change event {}", statusChangeEvent);
}
instanceInfoReplicator.onDemandUpdate();
}
};
if (clientConfig.shouldOnDemandUpdateStatusChange()) {
applicationInfoManager.registerStatusChangeListener(statusChangeListener);
}
//
instanceInfoReplicator.start(clientConfig.getInitialInstanceInfoReplicationIntervalSeconds());
} else {
logger.info("Not registering with Eureka server per configuration");
}
}
상기 코드 중 몇 가지 주의해 야 할 점 이 있 습 니 다.이 관건 들 은 뒤의 장 에서 계속 전 개 될 것 입 니 다.a.주기 적 으로 서비스 목록 을 업데이트 합 니 다.
b.주기 적 인 서비스 재계약;
c.서비스 등록 논 리 는 Runnable 구현 클래스 인 InstanceInfoReplicator 에 넣 어 새 스 레 드 에서 실 행 됩 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.