@LoadBalanced는 클라이언트 사이드 로드밸런싱을 위해 RestTemplate Bean을 생성하여 붙이는 어노테이션이다.
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
이렇게 설정을 했다면 등록된 RestTemplate 빈을 통해 호출 시 Eureka Server에 eureka-client로 등록된 모든 클라이언트에 대해 Load Balancing이 가능하다. 클라이언트 측에서는 필요한 어플리케이션의 이름만 알고 있으면 된다.
@Autowired
private RestTemplate restTemplate;
@GetMapping("api/result")
public String getApiResult() {
return restTemplate.getForObject("http://service-name/api/result", String.class);
}
다만 위와 같이 등록된 RestTemplate 빈을 eureka-client 이름이 아니라 외부 API를 호출하는 데 사용하게 된다면 java.lang.IllegalStateException: No instances available 이라는 익셉션이 발생한다. 외부 API의 도메인을 eureka-client 목록에서 찾을 수 없기 때문이다. 이런 경우, 등록되어 있는 RestTemplate 빈을 @Autowired로 가져오는 것이 아니라 new RestTemplate() 으로 새로운 RestTemplate을 생성해서 쓰면 정상적으로 동작한다.
'Spring' 카테고리의 다른 글
스프링 Dependency Injection의 세가지 방법 (0) | 2022.03.15 |
---|