반응형
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 가능
반응형
'MSA' 카테고리의 다른 글
Zuul - API Gateway (0) | 2021.09.11 |
---|---|
Eureka - Service Discovery (0) | 2021.09.10 |
Ribbon - Client LoadBalancer (0) | 2021.09.10 |
Hystrix - Circuit Breaker (0) | 2021.09.10 |
Twelve-Factors (0) | 2021.09.10 |