Section 10: Microservice 간 통신 - KwangtaekJung/MSA-SpringCloud-user-service GitHub Wiki
Section 10: Microservice 간 통신
- Communication types
- RestTemplate
- Feign Client - Log, Exception
- ErrorDecoder
- Multiple Orders ervice
Communication Types
- Synchronous HTTP communication
- Asynchronous communication over AMQP
RestTemplate
Feign Web Service Client
- FeigClient -> HTTP Client
- REST Call을 추상화 한 Spring Cloud Netflix 라이브러리
- 사용 방법
- 호출하려는 HTTP Endpoint에 대한 interface 생성
- @FeignClient 선언
- Load balanced 지원
FeignClient 로그 사용
@Bean
public Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
logging:
level:
com.example.userservice.client: DEBUG
FeignException
- FeignException 발생
=>원래 발생하는 Exception이 아닌 FeignException 발생함.
- 잘못된 주소 입력 시 본래 Microservice에서는 404 발생하지만 최종 Feign Client에서는 FeignException(500)이 발생함.
FeignErrorDecoder
데이터 동기화 문제
- Orders Service 2개 기동
- Orders 데이터도 분산 저장 -> 동기화 문제
- 해결책1: 하나의 Database 사용
- 해결책2: Database 간의 동기화
- 각각의 데이터베이스를 사용하고 Message Queueing Server를 통해 두 데이테베이스를 동기화한다.
- 해결책3: Kafka Connector + DB
- 데이터베이스 앞에 Message Queueing Server를 두고 데이터베이스로 오는 모든 요청을 처리한다.
- read 요청은 데이터베이스로 직접 할 수도 있다.