MSA

Spring Cloud Feign - Declarative Http Client

Beekei 2021. 9. 11. 00:08
반응형

Spring Cloud Feign 이란?

Netflix에서 개발된 Http client binder

RestTemplate 호출 등을 JPA Repository 처럼 interface로 단순화 가능

Spring Data JPA 에서 실제 쿼리를 작성하지 않고 Interface 만 지정하여 쿼리실행 구현체를 자동으로 만들어주는 것과 유사


사용법

1. Feign Dependency 추가

ServiceA build.gradle

dependencies {
	...
	compile('org.springframework.cloud:spring-cloud-starter-openfeign')
}

2. Main Class에 @EnableFeignClients 추가

ServiceA main class

@EnableEurekaClient // Eureka
@EnableCircuitBreaker // Hystrix
@EnableFeignClients
@SpringBootApplication
public class ServiceAApplication {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(ServiceAApplication.class);
    }

}

3. Interface 생성 후 @FeignClient 어노테이션 추가

ServiceA FeignServiceBRemoteService

@FeignClient(name = "serviceB", url = "http://localhost:8082/")
public interface FeignServiceBRemoteService {
    @RequestMapping("info/{serviceBId}")
    String getServiceBInfo(@PathVariable("serviceBId") String serviceBId);
}
  • @FeignClient의 name 속성은 서비스명을 명시
  • @FeignClient의 url 속성을 명시하면 순수 Feign Client로써 동작
  • @FeignClient의 url 속성을 명시하지 않으면 Feign + Eureka - Service Discovery + Ribbon - Client LoadBalancer 모드로 동작
  • 즉 Eureka Server에서 Feign Client 서버 목록을 조회해서 Ribbon을 통해 로드밸런싱을 하면서 HTTP 호출을 실행

4. Hystrix - Circuit Breaker 사용 시 application.yml 설정

ServiceA application.yml

feign:
  hystrix:
    enabled: true # feign + hystrix 사용

 

Spring Cloud Feign의 강점

  • Eureka - Service Discovery + Ribbon - Client LoadBalancer 을 이용한 Client-Side Load Balancing 가능
  • Hystrix - Circuit Breaker 를 이용한 메소드별 Circuit Breaker 가능

참고 블로그

 

Spring Cloud Feign - Declarative Http Client

Spring Cloud Feign 이란?

www.notion.so

 

반응형