Spring Cloud로 개발하는 MSA/Microservcie간 통신

ErrorDecoder

webmaster 2022. 2. 6. 13:10
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으로 등록할 필요가 없으므로 주석처리한다.

 

728x90

'Spring Cloud로 개발하는 MSA > Microservcie간 통신' 카테고리의 다른 글

데이터 동기화 문제  (0) 2022.02.06
FeignClient  (0) 2022.02.06
REST Template  (0) 2022.02.06