본문 바로가기
SI 업무/MSA관련

section 1-6. (FeignClient) msa -> msa 호출하는법

by 새로운걸 배우는게 너무 싫은 IT 복붙러 2024. 12. 30.
728x90

 

현재 msa 의 구조다.

 

아래는 msa 별  구현된 기능이 정리된 표이다.

아래표 에서 보면
http://localhost:xxxx/user/service/{userId}  요청이 들어오면

user정보와 해당 user의 주문 정보를 return 해야 한다.

user-service msa 는 user정보를 가지고 오는 logic 이 구현되어 있다.

하지만 주문정보는 order-service msa 가 처리 한다.

하여 user-service 에서 => order-service 를 호출 해야 한다.


서로 다른 msa 를 호출 하는 방법은 두가지가 있다.

1. RestTemplate 을 이용한 방법 (옛날 방법이고 Spring5.0 에서는 안쓴단다. 배우지 말자)

2. WebClient 방법 ( <= 요즘 쓰는 방법이고 이게 @FeignClient 를 쓰는 방법이다)


FeignClient 를 사용 하는 방법  설명


요점은 "user-service 에서 order-service 에 있는 method를 내가 가진 msa 처럼 interface 형식으로 구현해주면
호출 하는 시점에 order-service 에 해당 method 를 호출해서 return 값을 전달한다."  머 이런 내용이다.

1.  해당 기능은 Netflix 의 libary 라서 또 의존성을 넣어줘야 한다.

user-service -> order-service 를 호출 해야 해서 user-service 의 pom.xml 에 아래 내용 추가해야함.

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>3.1.0</version>
        </dependency>

 

2. user-service 에 order-service 를 inteface 로 구현한다.
   order-service 에 구현된 method를 user-service 에 interface 해 놓으면 FeignClient 알아서 호출 해준다는 개념

@reginClient(name="ORDER-SERVICE")   <- apigateway-service 에 등록된 order-service 의 instance 이름

 

@GetMapping("/order-service/{userId}/order")  <- order-service 에 구현된것과 같은 내용의 mapping 정보

user-service 의 interface 내용

 

실제 구현체인 order-service 내용


만들어 넣은 UserServiceClient( <- FeignClient 의 interface) 는 최초에 bean으로 생성 되지 않는다.

하여 UserController 에 주입 하기 위해 user-servcie 의 main 메소드 가진 class위에 @EnableFeignClients 를 붙여 줘야

Bean 생성을 해준다.

 

UserSerivceContrller 에서 UserServiceClient 를 사용 하는 logic을 넣는다.

 

정상 작동 확인함.

728x90