Cloud/SpringCloud로 개발하는 MSA

Service Discovery

Tony Lim 2021. 6. 29. 22:04

API gateway 가 앞에 따로 존재하고 그뒤에 여러 instance들을 관리해주는 netflix eureka 서버가 존재한다. 

server:
  port: 8761

spring:
  application:
    name: discoveryservice

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

false로 해준것들은 현재 discoveryservice는 eureka server를 담당하는 것인데 굳이 자기 자신을 등록할 필요가 없기 때문이다.

 

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

이제 간단한 user-service applcation 을 만들어서 등록을 해준다.

user-service가 등록이 되었다. 이제 2개를 등록해보자

edit configuration에서 복사를 한후 VM option 에서 -Dserver.port를 다른것으로 설정해주고 실행시켜보자.

정상적으로 2개가 등록 된것을 확인 할 수 있다.

 

.\gradlew bootRun --args="--server.port=9003"

명령어로 도 다른 port로 시작할 수 있다. 

gralde 로 build 한후 java -jar -Dsever.port=9004 명령어를 통해 jar 를 실행시켜주면된다.
이떄 powershell 에서 하면 Dsever.port 가 먹히지를 않는다.

./gradlew bootRun --args='--server.port=9004' 이렇게 해줘야함

 

applcation yaml 에서 port 번호를 0 으로 주어지면 random port 를 사용하게 된다.

표현 방식 때문에 instance 몇개를 키더라도 0 으로 보이게된다.  실제로는 여러개가 잘 연결되어 돌아가고 있다.

 

 

 

server:
  port: 8761

spring:
  application:
    name: discoveryservice

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
server:
  port: 0
spring:
  application:
    name: user-service

eureka:
  instance:
    instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka

이렇게 instance id 를 지정 해주면

잘 뜨는것을 확인할 수 있다. 

좀비 프로세스처럼 남아서 로그가 남는 경우를 지우기 위해 # 주석 처럼 option 들을 추가해주었다.