Ribbon 예제에서, 서버 목록을 yml에 직접 넣었는데 자동화할 방법이 있을까?

  • 서버가 새롭게 시작되면 그것을 감지하여 목록에 자동으로 추가되고,
    서버가 종료되면 자동으로 목록에서 삭제하기 위한 방법은 없을까?

Dynamic Service Discovery - Eureka

  • Service Registry
    • 서비스 탐색, 등록
    • 클라우드의 전화번호부
    • (단점) 침투적 방식 코드 변경
  • DiscoveryClient
    • Spring-cloud에서 서비스 레지스트리 사용 부분을 추상화 (Interface)
    • Eureka, consul, Zookeeper, etcd 등의 구현체가 존재
  • Ribbon은 Eureka와 결합하여 사용할 수 있으며 서버 목록을 자동으로 관리한다.


Eureka Server(Registry) 만들기

@EnableEurekaServer
@SpringBootApplication
public class EurekaServiceApplication {
 public static void main(String[] args) {
 SpringApplication.run(EurekaServiceApplication.class);
 }
}
  • Spring Boot Application 작성 후 @EnableEurekaServer 주석 달아주기

Eureka client 만들기 - 내 서버 정보 등록 / 내가 호출의 대상이 되고 싶을 때

@EnableEurekaClient
@SpringBootApplication
public class EurekaServiceApplication {
 public static void main(String[] args) {
 SpringApplication.run(EurekaServiceApplication.class);
 }
application.yml
eureka:
 client:
 serviceUrl:
 defaultZone: http://localhost:8761/eureka/
  • Spring Boot Application 작성 후 @EnableEurekaServer 주석 달기

Eureka in Spring Cloud

  • 서버 시작 시, Eureka Server(Registry)에 자동으로 자신의 상태를 등록 (UP)
    • eureka.client.register-with-eureka : true (default)
  • 주기적 HeartBeat 로 Eureka Server에 자신이 살아있음을 알림
    • eureka.instance.lease-renewal-interval-in-seconds:30 (default)
  • 서버 종료 시 Eureka Server에 자신의 상태 변경(DOWN) 혹은 자신의 목록 삭제
  • Eureka 상에 등록된 이름은 'spring.application.name'

[실습 Step-4] Eureka Server 실행

  • eureka-server 서비스 생성

  • build.gradle
compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-server')
  • EurekaServerApplication (@EnableEurekaServer)

  • eureka-server 접속 (default port : 8761)


[실습 Step-4] Eureka Cilent 적용하기 - Product 서버

  • [product] build.gradle
    • compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')

  • [product] ProductApplication : @EnableEurekaClient

  • [product] application.yml
    • OS에서 제공하는 hostname 대신 자신의 ip address를 사용하여 등록

  • [display] build.gradle / 위와 동일
  • [display] ProductApplication : @EnableEurekaClient / 위와 동일
  • [display] application.yml / 위와 동일

[실습 Step-4] Eureka Client 적용하기 - 서버 확인

  • display / product 서비스 실행
  • Eureka server 확인


[실습 Step-4] Eureka 서버 주소 직접 명시

  • [product/display] application.yml에 Eureka Server 주소 명시
    • default 값이 http://127.0.0.1:8761/eureka 이므로 로컬 테스트 시 설정 X


실습 정리 - Eureka 서버 주소 직접 명시

  • @EnableEurekaServer / @EnableEurekaClient를 통해 서버 구축, 클라이언트 Enable이 가능하다.
  • @EnableEurekaClient를 붙인 Application은 Eureka 서버로부터
    남의 주소를 가져오는 역할자신의 주소를 등록하는 역할 둘 다 수행 가능하다.
  • Eureka client가 Eureka Server에 자신을 등록할 때 'spring.application.name'이 이름으로 사용된다.

[실습 Step-4] RestTemplate에 Eureka 적용하기

  • 목적
    • Display -> Product 호출 시, Eureka를 적용하여 ip주소를 코드나 설정 '모두'에서 제거하고자 함
  • [display] application.yml 변경
    • product.ribbon.listOfServer 제거 / 서버 주소는 Eureka Server에서 가져올 수 있도록

  • [확인] display 서버 재시작
    • Product의 주소가 설정/코드에서 모두 제거됨
    • 코드에서는 http://product/로 접근

실습 정리 -  RestTemplate에 Eureka 적용하기

  • @LoadBalanced Rest Template에는 Ribbon + Eureka 연동
  • Eureka client가 설정되면, 코드상에서 서버 주소 대신 Application 이름을 명시하여 호출 가능
  • Ribbon의 Load Balancing과 Retry가 함께 동작

'Back-end > MSA - Spring Cloud' 카테고리의 다른 글

API Gateway - Zuul  (0) 2021.11.24
Declarative Http Client - Feign  (0) 2021.11.24
Client LoadBalancer - Ribbon  (0) 2021.11.23
Circuit Breaker - Hystrix  (0) 2021.11.23
Cloud Native 이해  (0) 2021.11.17

+ Recent posts