-
Spring Cloud #5 FeignClientSpring Cloud 2022. 5. 2. 13:58
Declarative HTTP Client - Feign
- Interface 선언을 통해 자동으로 HTTP Client를 생성
- RestTemplate는 concrete 클래스라 테스트하기 어렵다
- 관심사의 분리 - 어떤 url, 어떻게 파싱할 것인지 관심없다
- Spring Cloud에서 Open-Feign 기반으로 Wrapping 한 것이 Spring Cloud Feign
동작
- Ribbon + Eureka + Hystrix 가 통합되어 있다.
- @FeignClient에 url 명시 시 -> 순수 Feign Client로만 동작
- 명시하지 않으면 -> Feign + Ribbon + Eureka 모드로 동작
- name에서 product 서버 목록을 조회해서 ribbon을 통해 load-balancing 하며 HTTP 호출 수행

- 위와 같은 구조에서 purchase server 에서 customer의 server의 메서드를 실행 가능하다.
실습
- Eureka server에 Eureka client를 등록하는 과정은 생략하고 이후부터 진행
1. build.gradle에 의존성 추가
implementation("org.springframework.cloud:spring-cloud-starter-openfeign")2. PurchaseApp에 @EnableFeignClients 어노테이션 추가
@EnableDiscoveryClient @EnableFeignClients @SpringBootApplication public class PurchaseApp { public static void main(String args[]){ SpringApplication.run(PurchaseApp.class); } }3. FeignClient interface 생성
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; @FeignClient("customer") public interface TestClient { @GetMapping("/v1.0/contents/test") String test(); }test메서드가 실행되면 cutomer 앱에서 @GetMapping("/v1.0/contents/test") 메서드 호출
4. FeignClient interface 사용하는 Controller 생성
@RestController public class PurchaseController { @Autowired TestClient testClient; @GetMapping("/feignClientTest") public String test2(){ return testClient.test(); } }이렇게 하면 끝인데, 물론 customer앱과 메서드는 이미 생성이 되어 있어야 실행할 수 있다.
즉, 아래같은 메서드와 구조가 완성되어 있어야 한다.
spring: application: name: customer@RestController public class TestController { @GetMapping("/v1.0/contents/test") public String test(){ return "gateway ok"; } }'Spring Cloud' 카테고리의 다른 글
Spring Cloud #3 RabbitMQ (0) 2022.04.25 Spring Cloud #2 Eureka (0) 2022.04.20 Spring Cloud #1 Gateway 구현 (0) 2022.04.19