Eureka naming server

이누의 벨로그·2022년 12월 29일
0

마이크로서비스

목록 보기
1/1
post-thumbnail

Eureka naming server는 Service Discovery 라이브러리이다.

키-밸류 형태로 서비스 이름과 그 위치를 가진다. netflix-eureka-server라이브러리를 사용하자.

YAML

server:
  port: 8761
spring:
  application:
    name: discoveryservice

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false

eureka.client.register-with-eurak/ fetch-registry 설정은 자기 자신을 (discovery server) 서비스로 등록하는 설정이며 서버에겐 의미가 없으므로 false로 설정한다.

등록할 서버는 @EnableEurekaServer , 클라이언트가 될 서비스는 @EnableEurekaClient 로 등록한다. @EnableDiscoveryClient

를 사용해도 상관없으며 discovery가 표준, 없는 어노테이션은 구현체이다.

fetch-registry 는 등록된 인스턴스들의 정보를 자동갱신해준다.

clienet yaml파일은 다음과 같다.

server:
  port: 9001
spring:
  application:
    name: user-service
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka

service-url로 서버의 위치가 될 url를 지정한다. map 형태가 되어야 하며 defaultZone이 기본이다.

여러 인스턴스 실행

intellij의 구성편집에서 새로운 인스턴스를 실행할 수 있다.

기존 인스턴스를 복사해 새로운 구성을 만든 뒤, vm 옵션을 다음과 같이 지정해준다

-Dserver.port=새로운 포트

이제 포트번호가 다르므로 정상적으로 실행된다.

유레카 서버를 확인하면 아래와 같이 2개의 인스턴스가 같은 서비스로 등록된 것을 알 수 있다.

커맨드 라인 실행

커맨드 라인으로 실행하는 방법을 알아보자

메이븐 : mvn spring-boot:run -Dspring-boot.run.jvmArguments=Derver.port=9003``

그레이들 : ./gradlew bootrun --args ' --server.port=9003’

혹은 gradle compile 후
java -jar -Dserver.port=18080 ./build/my-app-0.0.1-SNAPSHOT.jar

yaml 랜덤 포트 사용

그러나 매번 포트를 매개변수로 지정하는 것은 생산성을 떨어트리므로 application.yaml 설정을 통해서 랜덤 포트를 부여하는 방식을 사용해보자.

server:
  port: 0
spring:
  application:
    name: user-service
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka

0으로 포트번호를 지정하면 랜덤한 포트가 실행시 지정된다.

그러나 이 설정으로 여러 인스턴스를 실행한 뒤 유레카 서버 페이지를 확인해보면 인스턴스가 제대로 리스트업되지 않는다.

다음과 같이 고유한 인스턴스 id를 부여하자.

eureka:
	instance:
	    instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}

랜덤한 포트를 가진 2개의 인스턴스가 표시되는 것을 알 수 있다.

profile
inudevlog.com으로 이전해용

0개의 댓글