@GetMapping("second-service/check")
public String checkSecond(){
return "Hi, there, second check";
}
@GetMapping("first-service/check")
public String checkFirst(){
return "Hi, there, first check";
}
MSA의 개발, 배포, 운영에 필요한 아키텍쳐를 쉽게 구성할 수 있도록 지원하는 Spring Boot 기반 프레임워크
분산 시스템 상에 필요한 여러 패턴들을 표준 패턴화 시켜 손쉽게 개발할 수 있도록 지원함
어떤 서비스가 사용되어야 할까?
Spring Cloud Config Server
환경 설정관리를 위함
다양한 마이크로서비스에서 사용하는 정보를 SpringCloudConfigServer를 통해 외부의 저장소에 저장할 수 있다.
유지보수성이 높아진다.
Location transparency
서비스 등록과 위치정보 확인 Naming Server(Eureka)
Load Distribution(Load Balancing)
Ribbon (Client Side)
Spring Cloud Gateway(권장)
Easier REST Clients
각각의 서비스가 데이터를 주고 받는 방법(RestTemplate , Feign Client)
Visibility and monitoring
ELK 등등 (로그 추적 및 모니터링)
Fault Tolerance
Hystrix
서비스의 지연과 장애에 대해 내성을 갖게 해주는 라이브러리
Spring Cloud Netflix Eureka
Service Discovery
외부에서 다른 서비스들이 마이크로 서비스를 검색하기 위해 사용되는 일종의 전화번호책이다.
API gateway에다가 요청을 보내고 요청 정보가 서비스 디스커버리에 전달되어 필요한 서비스의 위치를 알려준다.
Eureka 서버 구동 확인 및 application.yml
server:
port: 8761
spring:
application:
name: discoveryservice
eureka:
# 이 설정의 default가 true -> 자기 자신을 전화번호부에 등록하는 것은 의미 없는 행위
client:
register-with-eureka: false
fetch-registry: false
Eureka 서버에 등록된 userService 구동 확인 및 application.yml
server:
port: 9001
spring:
application:
name: user-service
eureka:
client:
register-with-eureka: true
# Eureka 서버로 부터 인스턴스들의 정보를 주기적으로 가져올 것인지
# 설정하는 속성 -> fetch-registry = true 갱신 된 정보를 받겠다는 설정
fetch-registry: true
service-url:
defaultZone: http://127.0.0.1:8761/eureka
같은 서비스를 하나 더 띄워보자
application.yml 파일 내부의 port설정을 동적으로 추가해주는 코드를 넣고
edit configurations에서 환경변수를 추가해주어야 한다
그렇지 않으면 포트번호가 겹치게 되어 실행 오류가 남
server:
port: ${PORT}
spring:
application:
name: user-service
eureka:
client:
register-with-eureka: true
# Eureka 서버로 부터 인스턴스들의 정보를 주기적으로 가져올 것인지
# 설정하는 속성 -> fetch-registry = true 갱신 된 정보를 받겠다는 설정
fetch-registry: true
service-url:
defaultZone: http://127.0.0.1:8761/eureka
server:
# 0의 의미 랜덤 포트를 사용하겠다는 의미! 포트 충돌을 의식하지 않아도 되는 장점이 있다.
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
# Eureka 서버로 부터 인스턴스들의 정보를 주기적으로 가져올 것인지
# 설정하는 속성 -> fetch-registry = true 갱신 된 정보를 받겠다는 설정
fetch-registry: true
service-url:
defaultZone: http://127.0.0.1:8761/eureka