RestTemplate 빈 등록
@LoadBalanced
: 스프링 클라우드가 Ribbon을 지원하는 RestTemplate 클래스를 생성하도록 지정@SpringBootApplication
@EnableEurekaClient
public class PhotoAppApiUsersApplication {
public static void main(String[] args) {
SpringApplication.run(PhotoAppApiUsersApplication.class, args);
}
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
RestTemplate Client 생성
restTemplate.exchange({url}, {HTTP Method}, {HTTP Entity(Header/Body)}, {response type}, {parameter})
RestTemplate 호출에서 서비스의 물리적 위치를 사용하는 대신 호출하려는 서비스의 유레카 서비스 ID를 사용합니다(spring.application.name).
RestTemplate이 Eureka한테 organization-service
에 대한 모든 주소들을 먼저 물어보고, 받은 주소들을 가지고 로드 밸런싱(라운드 로빈 방식)을 통해서 요청을 보내게 됩니다.
@Component
public class OrganizationRestTemplateClient {
@Autowired
private RestTemplate restTemplate;
public Organization getOrganization(String organizationId) {
ResponseEntity<Organization> restExchange =
restTemplate.exchange(
"http://organization-service/v1/organizations/{organizationId}",
HttpMethod.GET,
null,
Organization.class,
organizationId
);
return restExchange.getBody();
}
}
의존성 설정
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
@EnableFeignClients 어노테이션 추가
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class PhotoAppApiUsersApplication {
public static void main(String[] args) {
SpringApplication.run(PhotoAppApiUsersApplication.class, args);
}
}
Feign Client 인터페이스 생성
@FeignClient(name = "{service.name}")
-> 인터페이스를 대표할 서비스 애플리케이션 지정@FeignClient(name = "organization-service", path = "v1/organizations/")
public interface OrganizationFeignClient {
@GetMapping(path = "{organizationId}", produces = MediaType.APPLICATION_JSON_VALUE)
Organization getOrganization(@PathVariable("organizationId") String organizationId);
}
Feign Client에 대한 로깅 설정
logging:
level:
com:
alexcode:
photoapp:
api:
users:
PhotoAppApiUsers:
feign: DEBUG
logging:
level:
com:
alexcode:
photoapp:
api:
users:
PhotoAppApiUsers:
feign:
AlbumServiceClient: DEBUG
@Configuration
public class FeignClientConfig {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}