728x90
- REST 방식을 사용하기 위해 추상화 한 Spring cloud Netfilx을 라이브러리이다
- 개발자 입장에서는 하나의 애플리케이션 안에서 사용하는 느낌이 들도록 사용할 수 있도록 도와준다.
- 의존성 추가

UserService의 Pom.xml
- @EnableFeignClients 어노테이션 추가

UserService의 Main에 어노테이션 추가
- FeignClient 인터페이스 생성

UserService의 OrderServiceClient 인터페이스 생성 - 실행하고자 하는 MSA의 이름을 @FeignClient의 name속성으로 전달한다.
- 실제 같은 서비스에 있는듯이 Mapping을 해주면 된다.
- UserServiceImpl 수정
- 생성자 주입

생성자로 생성한 인터페이스를 주입받는다. 
UserServiceImpl의 getUserByUserId 메소드 수정 - 기존에 사용하던 RestTemplate은 주석처리하여 동작하지 않도록 하고, 실제 같은 Application에 있는 듯이 사용하기만 하면 된다.
FeignClient 예외 처리
- FeignClient에서 없는 주소를 접속하게 되면, 호출하는 곳에는 404에러가 발생하지만 이걸 사용한 곳에는 500 에러가 발생한다.
- try - catch를 통해 FeignException을 잡아 문제가 발생하지 않는 부분은 출력하고 문제가 발생한 부분(try-catch로 감싼 부분)은 출력하지 않게 할 것이다.
- Logging Level 추가

UserService의 application.yml 파일에 client에 log를 추가해준다
- Bean 추가

UserService의 main 클래스에 Bean으로 등록
- 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()); } userDto.setOrders(orders); return userDto; }
-
728x90
'Spring Cloud로 개발하는 MSA > Microservcie간 통신' 카테고리의 다른 글
| 데이터 동기화 문제 (0) | 2022.02.06 |
|---|---|
| ErrorDecoder (0) | 2022.02.06 |
| REST Template (0) | 2022.02.06 |