ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Cloud #5 FeignClient
    Spring 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
Designed by Tistory.