SMALL

Spring Cloud Netflix Eureka

MSA 환경에서는 Service의 Ip, Port 정보가 일정하지 않고 지속적으로 변화할 수 있다.

이러한 환경에서 Service의 정보를 수동으로 입력하고 관리하는 것은 한계가 분명하다.

이를 Service Discovery를 통해 해결할 수 있다.

 

Eureka의 구성 요소

Service Discovery

  • 외부에서 마이크로 서비스의 위치를 찾아주기 위한 기능

Service Registry

  • 각각의 서비스가 자신의 위치(Ip, Port) 정보를 특정 버서에 등록(Registry)하는 작업

 

Eureka 사용 예시

기존에 작성한 포스팅에서 API Gateway를 사용하였다.

(https://joomn11.tistory.com/123)

 

해당 설정에서 API Gateway의 설정에 각각의 서비스들의 물리적인 정보가 그대로 적혀있다.

이러한 경우 서비스의 물리적 정보가 변경되는 경우 API Gateway도 변경되어야 하는 디펜던시가 생기게 된다.

이러한 상황을 방지하기 위해 Service Discovery를 사용해보자.

 

Eureka Server 

 

dependency 추가 (build.gradle)

dependencies {
	implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
}

 

application.yml 설정

server:
  port: 8761
eureka:
  client:
    register-with-eureka: false
    service-url:
      default-zone: http://${eureka.instance.hostname}:${server.port}/eureka
    fetch-registry: false
  instance:
    hostname: localhost

 

Annotation 추가

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurekaServerApplication.class, args);
	}

}

 

Eureka Client

 

dependency 추가 (build.gradle)

dependencies {
	implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
}

 

application.yml 설정

eureka:
  instance:
    appname: product-service
  client:
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:8761/eureka

 

Annotation 추가

@SpringBootApplication
@EnableEurekaClient
public class ProductServiceApplication {

	public static void main(String[] args) {
		SpringApplication.run(ProductServiceApplication.class, args);
	}

}

 

API Gateway

위와 같이 Eureka Server, Client를 설정해두면, API Gateway의 설정 정보 중에 물리적인 주소를 하드 코딩한 부분을 수정해 줄 수 있다.

 

spring:
  application:
    name: gateway
  cloud:
    gateway:
      routes:
        - id: product-service
          # uri: http://localhost:8045
          uri: lb://PRODUCT-SERVICE
          predicates:
            - Path=/product/**
        - id: cartservice
          # uri: http://localhost:8050
          uri: lb://CARTSERVICE
          predicates:
            - Path=/cart/**

 

 

LIST

+ Recent posts