-
Spring Cloud Netflix EurekaBackEnd/Spring Cloud 2022. 6. 18. 09:33반응형
Spring Cloud Netflix Eureka
Spring Cloud Netflix Eureka는 Service Discovery 입니다. Service Discovery란 MSA와 같은 분산 환경에서 활성중인 서비스 인스턴스들을 관리하는 것을 말합니다. Cloud 환경에서 Auto-scaling, 생성, 삭제, 확장 등을 통해 IP주소나 Port들이 동적으로 변경되어도 서비스 클라이언트가 서비스를 호출할 때 서비스의 위치를 알 필요가 없습니다. Eureka는 단지 서비스의 위치만을 표현하는 역할로 보통 Spring Cloud Gateway와 같은 클라이언트 사이드 로드밸런서와 함께 동작합니다.
Spring Cloud Netflix Eureka 동작 순서
Eureka Server 기동
> Eureka Client(Eureka Server에 등록될 서비스들) 기동
> Eureka Server는 자신에게 등록된 Eureka Client에게 ping을 보내 Health Checking 수행 (30초 주기)
> Heart Heat가 일정 횟수 이상으로 동작하지 않으면 Eureka Server는 해당 Client 삭제
Eureka Server(Service Discovery)
활성중인 서비스 인스턴스들을 관리합니다. Spring Cloud Netflix - Eureka Server를 사용합니다.
- 프로젝트 생성 (Create New Project > Spring Initializr)
- Dependencies (Spring Cloud Discovery > Eureka Server)
plugins { id 'org.springframework.boot' version '2.6.8' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' repositories { mavenCentral() } ext { set('springCloudVersion', "2021.0.3") } dependencies { implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server' testImplementation 'org.springframework.boot:spring-boot-starter-test' } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" } }
- application.yml
server: port: 8761 spring: application: name: discovery-service eureka: client: # 해당 서버를 서비스로 등록할지에 대한 속성입니다.(default: true) register-with-eureka: false fetch-registry: false
- @EnableEurekaServer 설정
package com.example.servicediscovery; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class DiscoveryServiceApplication { public static void main(String[] args) { SpringApplication.run(DiscoveryServiceApplication.class, args); } }
- Dashboard
Eureka Client(Service Registry)
각각의 서비스는 자신의 위치(IP주소와 Port) 정보를 Eureka Server에 등록합니다. Eureka Server에 등록하기 위해 Spring Cloud Netflix - Eureka Client를 사용합니다.
- 프로젝트 생성 (Create New Project > Spring Initializr)
- Dependencies (Spring Cloud Discovery > Eureka Discovery Client)
plugins { id 'org.springframework.boot' version '2.6.8' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } ext { set('springCloudVersion', "2021.0.3") } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client' compileOnly 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" } }
- application.yml
server: port: 0 # random port spring: application: name: user-service eureka: # instance 식별을 위한 instance 정보를 등록합니다. instance: instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}} client: # 해당 서버를 서비스로 등록할지에 대한 속성입니다.(default: true) register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:8761/eureka
- @EnableDiscoveryClient 설정
package com.example.userservice; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class UserServiceApplication { public static void main(String[] args) { SpringApplication.run(UserServiceApplication.class, args); } }
- Dashboard
[참고 정보]
반응형'BackEnd > Spring Cloud' 카테고리의 다른 글
Spring Cloud Config (0) 2022.07.02 Spring Cloud Gateway (0) 2022.06.22 Spring Cloud (0) 2022.06.09 MSA(Microservice Architecture) (0) 2022.06.08 Cloud Native Application (0) 2022.05.28