728x90
- Feign 에러에서 어떤 오류 코드가 발생하고, 어떤 값을 반환하고, 어떤 메서드가 호출되는지 확인할 수 있다.
- FeignErrorDecoder 클래스 구현

UserService의 FeignErrorDecoder를 구현한다. - 404 에러일 경우 메소드 이름이 getOrders이면 ResponseStatusException오류를 발생시킨다.
- Bean 등록

UserService의 main에서 빈으로 등록한다.
- UserService 수정
-
@Override public UserDto getUserByUserId(String userId) { UserEntity userEntity = userRepository.findByUserId(userId); if (userEntity == null) { throw new UsernameNotFoundException("User not found"); //없을떄 오류 로그 } UserDto userDto = new ModelMapper().map(userEntity, UserDto.class); //List<ResponseOrder> orders = new ArrayList<>(); //주문이 없다고 생각하고 빈 값을 넣었다 //Get방식으로 사용자ID를 통해 주문 정보를 읽어온다 //하드코딩을 하는것이 아닌 yml과 같은 속성파일에 저장하는것이 변경되더라도 수정하기가 좋다 //String orderUrl = "http://127.0.0.1:8000/order-service/%s/orders"; /* Using as rest template */ /* String orderUrl = String.format(env.getProperty("order_service.url"), userId); ResponseEntity<List<ResponseOrder>> orderListResponse = restTemplate .exchange(orderUrl, GET, null, new ParameterizedTypeReference<List<ResponseOrder>>() { }); List<ResponseOrder> orders = orderListResponse.getBody(); */ /* Using as feign client */ /* Feign exception handling */ /* List<ResponseOrder> orders = null; try{ orders = orderServiceClient.getOrders(userId); }catch (FeignException e){ log.error(e.getMessage()); } */ List<ResponseOrder> orders = orderServiceClient.getOrders(userId); userDto.setOrders(orders); return userDto; } - 기존 코드를 동작시켰던 거처럼 동작시켜도 에러를 잡아준다.
-
- 확장
- 이전에 Exception을 발생시켰던 부분을 메시지를 yml파일에서 오류 메시지를 읽어와서 실행시켜 준다.

UserService.yml 설정파일에 exception.order_is_empty 설정
- FeignErrorDecoder를 수정한다.

UserService의 FeignErrorDecoder의 오류 메시지를 환경변수에서 읽어 오도록 변경한다 - Env값을 읽어와야 되기 때문에 컴포넌트로 Bean으로 등록해야 한다.

더이상 bean으로 등록할 필요가 없으므로 주석처리한다.
- 이전에 Exception을 발생시켰던 부분을 메시지를 yml파일에서 오류 메시지를 읽어와서 실행시켜 준다.
728x90
'Spring Cloud로 개발하는 MSA > Microservcie간 통신' 카테고리의 다른 글
| 데이터 동기화 문제 (0) | 2022.02.06 |
|---|---|
| FeignClient (0) | 2022.02.06 |
| REST Template (0) | 2022.02.06 |