Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Logback
- 다익스트라
- ZuulFilter
- 게이트웨이
- 스프링 시큐리티
- Spring Cloud Config
- 유레카
- docker-compose
- 메모이제이션
- 달팽이
- 서비스 디스커버리
- 도커
- spring cloud
- 완전 탐색
- 트리
- 이분 매칭
- Gradle
- 비트마스킹
- spring boot
- 백트래킹
- 플로이드 와샬
- dp
- 구현
- 주울
- Zuul
- 스택
- 이분 탐색
- Java
- 구간 트리
- BFS
Archives
- Today
- Total
Hello, Freakin world!
[Eureka] 서비스 검색하기 - RestTemplate 본문
이전 글에서는 인위적으로 서비스 간 통신에 DiscoveryClient 객체만 사용하도록 했다.
그로 인한 단점은 두 가지였다.
1. 로드 밸런싱 방식을 직접 구현해야 됐다.
2. 서비스 url을 직접 조립해서 약간 번거로웠다.
스프링에서 제공하는 간편한 방식으로 개선해보자.
멤버 서비스 수정
먼저 시동 클래스에 @EnableDiscoveryClient를 없앤다.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MemberserviceApplication {
public static void main(String[] args) {
SpringApplication.run(MemberserviceApplication.class, args);
}
}
EurekaClientConfig 클래스를 하나 만든다.
RestTemplate 빈을 생성하고 리본 인터셉터가 이 빈에 동작할 수 있도록 @LoadBalanced를 추가해준다.
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class EurekaClientConfig {
@LoadBalanced
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
이제 다음과 같이 RestTemplate를 바로 주입받아서 사용해도 내부에서 클라이언트측 로드밸런싱이 수행된다.
(url의 호스트네임은 서비스 이름이다.)
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import springboot.cloud.memberservice.client.dto.TeamDto;
@Component
public class TeamDiscoveryClient {
private final RestTemplate restTemplate;
public TeamDiscoveryClient(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
public TeamDto getTeam(Long teamId) {
ResponseEntity<TeamDto> exchange = restTemplate.exchange(
"http://team-service/teams/" + teamId,
HttpMethod.GET,
null,
TeamDto.class);
return exchange.getBody();
}
}
수정이 끝났다.
도커 컴포즈를 이용해 동작하는지 확인해보자.
'Spring Cloud > Service discovery' 카테고리의 다른 글
[Eureka] 서비스 검색하기 - DiscoveryClient (0) | 2021.02.19 |
---|---|
[Eureka] 서비스 디스커버리에 서비스 등록하기 (0) | 2021.02.18 |
Comments