7장. 나쁜 상황에 대비한 스프링 클라우드와 Resilience4j를 사용한 회복성 패턴

7.1 클라이언트 측 회복성이란?

Untitled

7.1.1 클라이언트 측 로드 밸런싱

7.1.2 회로 차단기

7.1.3 폴백 처리

7.1.4 벌크 헤드

7.2 클라이언트 회복성이 중요한 이유

7.3 Resilience4j 구현

7.4 스프링 클라우드와 Resilience4j를 사용하는 라이선싱 서비스 설정

7.5 회로 차단기 구현

7.5.1 회로 차단기 추가

  @CircuitBreaker(name = "licenseService")
	public List<License> getLicensesByOrganization(String organizationId) throws TimeoutException {
		return licenseRepository.findByOrganizationId(organizationId);
	}

7.5.2 회로 차단기 사용자 정의(설정)

resilience4j.circuitbreaker:
  instances:
    licenseService: # 라이선싱 서비스의 인스턴스 구성(회로 차단기 애너테이션에 전달되는 이름과 동일)
      registerHealthIndicator: true # 상태 정보 엔드포인트에 대한 구성 정보 노출 여부 설정
      ringBufferSizeInClosedState: 5 # 링 버퍼의 닫힌 상태 크기를 설정한다.
      ringBufferSizeInHalfOpenState: 3 # 링 버퍼의 반열린 상태 크기를 설정한다.
      waitDurationInOpenState: 10s # 열린 상태의 대기 시간을 설정한다
      failureRateThreshold: 50 # 실패율 임계치를 백분율(%)로 설정한다.
      recordExceptions: # 실패로 기록될 예외를 설정한다.
        - org.springframework.web.client.HttpServerErrorException
        - java.io.IOException
        - java.util.concurrent.TimeoutException
        - org.springframework.web.client.ResourceAccessException
    organizationService: # 조직 서비스의 인스턴스 구성(회로 차단기 애너테이션에 전달되는 이름과 동일)
      registerHealthIndicator: true
      ringBufferSizeInClosedState: 6
      ringBufferSizeInHalfOpenState: 4
      waitDurationInOpenState: 20s
      failureRateThreshold: 60