동기 방식
오래됐으나 여전히 많이 사용됨
로드밸런싱 연동 : @LoadBalanced
+ lb://
스프링 5부터는 유지보수 모드
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
restTemplate.getForObject("lb://order-service/orders", String.class);
동기 방식
스프링 6.1+ 부터 새로 추가된 최신 동기/블로킹 HTTP 클라이언트.
로드밸런싱 연동 : @LoadBalanced
+ lb://
@Bean
@LoadBalanced
public RestClient.Builder restClientBuilder() {
return RestClient.builder();
}
// 사용 예시
RestClient restClient = restClientBuilder.build();
String response = restClient.get()
.uri("lb://order-service/orders")
.retrieve()
.body(String.class);
비동기 방식
Spring WebFlux와 연동
로드밸런싱 연동 : @LoadBalanced
+ lb://
WebFlux 뿐만 아니라 mvc 에서도 사용 가능
@Bean
@LoadBalanced
public WebClient.Builder webClientBuilder() {
return WebClient.builder();
}
webClientBuilder.build()
.get()
.uri("lb://order-service/order")
.retrieve()
.bodyToMono(String.class);
동기 방식
로드밸런싱 연동 : @FeignClient(name = "service-name")
-> 자동으로 lb://
사용
인터페이스 선언만으로 통신 가능
@FeignClient(name = "order-service")
public interface OrderServiceClient {
@GetMapping("/orders")
String getOrders(@RequestParam String userId);
}