
먼저 글 작성에 앞서 해당 시리즈는 Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) 강의를 참고하여 필요한 내용들을 정리한 것임을 밝힙니다.
FeignClient는 RestTemplate보다 좀 더 쉽게 사용이 가능하다는 장점이 있다.
하지만 해당 FeignClient를 사용하기 위해서는 해당 API에 대해서 잘 알고 있어야 한다는 단점도 존재한다.
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
@FeignClient(name="second-service")
public interface SecondServiceClient{
@GetMapping("/port")
String getPort();
}
@FeignClient(name = "second-service")
public interface SecondServiceClient {
@GetMapping("/port23")
String getPort();
}
@RequiredArgsConstructor
public class FirstServiceController{
private final SecondServiceClient secondServiceClient;
@GetMapping("/second-service/port")
public String getSecondServicePort() {
String port = secondServiceClient.getPort();
return port;
}
}
@Bean
public Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
try, catch를 통한 에러 메시지 출력
코드
@RequiredArgsConstructor
public class FirstServiceController{
private final SecondServiceClient secondServiceClient;
@GetMapping("/second-service/port")
public String getSecondServicePort() {
try {
String port = secondServiceClient.getPort();
} catch(FeignException e) {
log.warn(e.getMessage());
}
return port;
}
}
@Component
public class FeignErrorDecoder implements ErrorDecoder {
@Override
public Exception decode(String methodKey, Response response) {
switch (response.status()) {
case 400:
// 요청이 잘 못 되었을 경우의 처리
return new ResponseStatusException(HttpStatusCode.valueOf(response.status()), "Bad Request");
case 404:
if (methodKey.contains("getPort")) {
return new ResponseStatusException(HttpStatusCode.valueOf(response.status()), "port is not found");
}
break;
default:
return new Exception(response.reason());
}
return null;
}
}