일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- EUREKA
- 코딩테스트
- OAuth
- spring security
- STS
- 자바
- JavaScript
- docker
- map()
- 비동기
- jQuery
- gitlab
- SpringBoot
- 스프링 클라우드
- IntelliJ
- map
- leetcode
- Java
- JS
- 스프링부트
- spring boot
- 도커
- 프로그래머스
- 유레카
- GIT
- Spring
- 자바스크립트
- Spring Cloud
- 스프링
- date
- Today
- Total
RATSENO
[Spring]Spring Cloud Netflix - Eureka[3] 본문
이전 포스팅 : https://ratseno.tistory.com/59
이전 포스팅 : https://ratseno.tistory.com/60
이전 포스팅에서 말씀드린대로
eureka-server에 등록된(Service Registration) employee-producer를 eureka-server를 통한 탐색(Service Discovery)을 통해
employee-consumer가 사용하도록 수정해보겠습니다.
employee-consumer 모듈의 pom.xml을 수정하도록 하겠습니다.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>employee-consumer</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR6</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
기존에 작성한 Controller인 ConsumerControllerClient에 DiscoveryClient 를 @Autowired 어노테이션을 이용하여 주입해줍니다.
package com.example.controller;
import java.io.IOException;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
@Controller
public class ConsumerControllerClient {
@Autowired
private DiscoveryClient discoveryClient;
public void getEmployee() throws RestClientException, IOException {
//String baseUrl = "http://localhost:8080/employee";
//기존의 employee-producer의 서비스 호출 url
List<ServiceInstance> instances=discoveryClient.getInstances("employee-producer");
ServiceInstance serviceInstance=instances.get(0);
String baseUrl=serviceInstance.getUri().toString();
baseUrl=baseUrl+"/employee";
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response=null;
try{
response=restTemplate.exchange(baseUrl,
HttpMethod.GET, getHeaders(),String.class);
}catch (Exception ex)
{
System.out.println(ex);
}
System.out.println(response.getBody());
}
private static HttpEntity<?> getHeaders() throws IOException {
HttpHeaders headers = new HttpHeaders();
headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);
return new HttpEntity<>(headers);
}
}
또한 기존에 employee-producer에서 노출한 서비스를 호출하는 부분(하드 코딩된)을 수정합니다.
수정된 내용은 주입한 DiscoveryClient를 이용하여 eureka에 등록된 서비스 인스턴스를 탐색하여 해당 인스턴스의 호출 url을 사용하는 것입니다.
employee-consumer의 application.properties 파일의 내용도 수정해줍니다.
수정 내용은 eureka-server url을 지정하는 것입니다.
server.port=8091
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka
또한 employee-consumer 어플리케이션의 이름을 지정하도록 하겠습니다.
resources폴더 아래 bootstrap.properties 파일에 아래 내용을 작성합니다.
spring.application.name=employee-consumer
이제 employee-producer, employee-consumer, eureka-server 모듈들을 Run 하여 확인해 보겠습니다.
먼저 eureka-server에 모듈들이 등록이 되었는지 확인하기위해 http://localhost:8761/ 로 접속해 보겠습니다.
위와 같이 employee-consumer, employee-producer 인스턴스가 정상적으로 등록된것을 확인할 수 있습니다.
이어서 employee-consumer가 eureka-server를 통해 employe-producer 인스턴스를 사용하였는지 확인하기 위해
employee-consumer의 로그 정보를 확인해 보면
아래와 같이 정상적으로 결과값이 내려오는것을 확인할 수 있습니다.
지금까지 eureka에 대해서 아주 간단한 예제를 통해 알아보았습니다.
저 또한 spring cloud 생태계에 대해 공부하는 과정이므로 부족한 것들이 많았을것으로 예상됩니다.
잘못된 부분 지적은 언제 환영이며!! 추가적으로 조사하여 보강하도록 하겠습니다.
감사합니다.!
Github : https://github.com/RATSENO/spring-cloud-example/blob/master/README.md
'DEV > SPRING' 카테고리의 다른 글
[Spring]Spring Cloud Netflix - Eureka + Zuul (3) | 2020.01.30 |
---|---|
[Spring]Spring Cloud Netflix - Eureka + Ribbon (1) | 2020.01.29 |
[Spring]Spring Cloud Netflix - Eureka[2] (0) | 2020.01.29 |
[Spring]Spring Cloud Netflix - Eureka[1] (3) | 2020.01.28 |
기본 객체와 영역 (0) | 2018.02.07 |