유레카 서버 (Eureka Server)
마이크로서비스의 기동 여부를 체크하고, 마이크로서비스가 등록되거나 삭제될 때 이에 대한 상태정보를 동적으로 감지하는 역할을 한다. 마이크로서비스는 기동되는 시점에 유레카 서버에게 이 정보를 전달한다.
유레카 서버는 유레카 클라이언트가 접속할 수 있는 defaultZone 서버 주소를 오픈한다 .
server:
port: 9091
spring:
application:
name: msa-architecture-eureka-server # 유레카 서버 이름
# Config server
cloud:
config:
url: http://localhost:8888
name: msa-architecture-config-server
# Eureka Standalone Server
eureka:
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://localhost:${server.port}/eureka/
위 yml 설정에 따르면, default zone: http://localhost:9091/eureka
부분이 마이크로서비스가 참조하는 유레카 서버가 된다.
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
@EnableEurekaServer
어노테이션을 등록해 유레카 서버를 동작시킨다.
애플리케이션을 실행하면 9091 포트에서 유레카 서버가 구동되어 각 마이크로서비스의 기동 유무를 감지할 준비가 된다.
줄 서버 (Zuul Server)
클라이언트의 요청을 각 마이크로 서비스에 분산시키고, 요청한 서비스가 실행될 수 있도록 서비스 라우팅을 하는 역할을 한다.
줄 서버는 유레카 서버에 등록된 마이크로 서비스 이름을 통해 라우팅을 수행한다. 서비스 라우팅은 줄 서버에서 설정한 콘텍스트 패스 (context path)를 기준으로 마이크로 서비스를 라우팅해준다.
여기서 콘텍스트 패스란, 애플리케이션을 구분하기 위한 경로로 아래 예제에서는 세 개의 마이크로 서비스 애플리케이션의 콘텍스트 패스를 지정하였다.
server:
port: 9090
spring:
application:
name: msa-architecture-zuul-server
# Config Server
cloud:
config:
url: http://localhost:8888
name: msa-architecture-config-server
# Eureka Client
eureka:
client:
serviceUrl:
defaultZone: http://localhost:9091/eureka/
healthcheck:
enabled: true
# Zuul Routing
zuul:
routes:
coffeeOrder: #routing_id
path: /coffeeOrder/** # zuul context root
serviceId: msa-service-coffee-order # spring application name
coffeeMember:
path: /coffeeMember/**
serviceId: msa-service-coffee-member
coffeeStatus:
path: /coffeeStatus/**
serviceId: msa-service-coffee-status
Zuul Routing 부분을 보면, 각 콘텍스트 패스에 마이크로서비스의 이름이 매핑되어 있다. 즉, http://localhost:9090/coffeeOrder
요청하면 줄 서버 설정값에 의해 msa-service-office-order
로 연결되는 것이다.
이 serviceId
로 마이크로서비스를 인식하기 위해, 각 마이크로 서비스의 설정 파일에는 아래와 같이 동일한 이름으로 설정이 되어있어야 한다.
@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class ZuulServerApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulServerApplication.class, args);
}
}
@EnableZuulProxy
를 설정하는 것만으로도 줄 서버를 동작시킬 수 있다.
또한, 줄 서버가 각 마이크로서비스를 감지하기 위해 루트 프로젝트의 애플리케이션에 아래와 같이 @EnableEurekaClient
어노테이션을 추가해야한다.
@EnableEurekaClient
@SpringBootApplication
public class MsaProjectApplication {
public static void main(String[] args) {
SpringApplication.run(MsaProjectApplication.class, args);
}
}
Eureka 서버를 9091 포트로 띄운 후 , 줄 서버를 9090 포트에서 띄웠다. application.yml
에 의해서 Eureka Client 설정이 적용되어 유레카 서버와 성공적으로 연결되었다.