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 요청은 데이터베이스로 직접 할 수도 있다.