728x90
반응형
아직 프로토타입까지만 작성하였지만 기본적인 내용이 돌아가기에 현재의 상태를 기록한다.
application.yml 파일
feign:
hystrix:
enabled: true
client:
config:
feignName:
connectTimeout: 5000
readTimeout: 5000
loggerLevel: full
hystrix:
command:
default: # 5초 타임아웃. 1분동안 최소 5회 호출 이상, 50% 이상 실패면 circuit open
execution:
isolation:
thread:
timeoutInMilliseconds: 5000
metrics:
rollingStats:
timeInMilliseconds: 60000
circuitBreaker:
requestVolumeThreshold: 5
errorThresholdPercentage: 50
hystrix 자체 만으로 circuit breaker를 구현할 수 있지만 어짜피 네트워크를 통한 api 호출 실패를 대비한 것이기에 feign과 같이 연동하는 것으로 최종 목표를 잡음.
또한 fallback method에서 관련된 내용을 debug 하고 원인 분석을 해야 하기에 fallbackFactory 방식으로 구성
아래는 Client 소스
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Map;
@FeignClient(name = "coocon",
url = "${chauffeur.coocon.acctNmUrl}",
fallbackFactory = CooconBankAccountClientFallbackFactory.class)
public interface CooconBankAccountClient {
@RequestMapping(method = RequestMethod.POST,
value = "url 이하 주소",
produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
String getCooconAcctnRcms(@RequestParam Map<String, String> requestMap);
}
실제 class는 안 만들고 JPA 처럼 interface만 만들어주고 선언만 해 주면 되는 형식으로 보임.
yml 파일에서 설정한 내용에 맞게 실패가 떨어지는 경우 CooconBankAccountClientFallbackFactory 에서 처리
import feign.hystrix.FallbackFactory;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.Map;
@Slf4j
@Component
public class CooconBankAccountClientFallbackFactory implements FallbackFactory<CooconBankAccountClient> {
private final CooconBankAccountClientFallback cooconBankAccountClientFallback;
public CooconBankAccountClientFallbackFactory() {
this.cooconBankAccountClientFallback = new CooconBankAccountClientFallback();
}
@Override
public CooconBankAccountClient create(Throwable cause) {
log.error(cause.getMessage(), cause);
return cooconBankAccountClientFallback;
}
public class CooconBankAccountClientFallback implements CooconBankAccountClient {
@Override
public String getCooconAcctnRcms(Map<String, String> requestMap) {
return "";
}
}
}
getCooconAcctnRcms 메소드를 구현 하면서 실패 시 대체 해야 할 내용을 작성 하면 됨.
728x90
반응형
'Architecture > MSA' 카테고리의 다른 글
Spring Cloud Gateway - Custom Predicate with AbstractRoutePredicateFactory (0) | 2021.01.06 |
---|---|
Spring Cloud Gateway - Global Filter (0) | 2021.01.06 |
Spring Cloud Gateway - Route Predicate & Gateway Filter Factory (0) | 2020.12.28 |
Zuul을 이용한 Gateway 구축 시 설정 (0) | 2020.12.11 |
MSA 관련 북마크 (0) | 2020.11.20 |