[Spring] 스프링 클라우드 유레카
2019-02-27 | Spring Spring cloud EurekaEureka 서버/클라이언트 실습
유레카 (spring-cloud-starter-eureka) - 서비스 디스커버리
- 클라이언트는 항상 애플리케이션의 일부로 원격의 디스커버리 서버에 연결하는 일을 한다.
- 연결되면, 서비스 이름과 네트워크 위치를 담은 등록 메시지를 보낸다.
spec
- spring-boot : 2.1.2.RELEASE
- spring-cloud-dependencies : Finchley.SR2
pom.xml
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
서버와 클라이언트
서버
- 전용 스프링 부트 애플리케이션으로 실행한다
- 서버 API는 등록된 서비스의 목록을 수집하기 위한 API와 새로운 서비스를 네트워크 위치 주소와 함께 등록하기 위한 API로 구성된다
클라이언트
- 마이크로서비스 애플리케이션에 의존성을 포함해 사용한다.
- 클라이언트는 애플리케이션 시작 후 등록과 종료 전 등록 해제를 담당하고 유레카 서버로부터 주기적으로 최신 서비스 목록을 가져온다.
서버 측에서 유레카 서버 실행하기
- spring-cloud-stgarter-netflex-eureka-server 의존성 추가
유레카 서버 활성화
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class StudySpringCloudApplication {
public static void main(String[] args) {
SpringApplication.run(StudySpringCloudApplication.class, args);
}
}
컨피규레이션 설정(application.properties)
server.port=${PORT:8761}
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
- http://localhost:8761/
클라이언트로 유레카 시작하기
pom.xml
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 서버측에서 서비스를 확인해보자
http://localhost:8761/eureka/apps
<applications>
<versions__delta>1</versions__delta>
<apps__hashcode/>
</applications>
유레카 클라이언트 활성화하기
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient
@SpringBootApplication
public class StudySpringCloudApplication {
public static void main(String[] args) {
SpringApplication.run(StudySpringCloudApplication.class, args);
}
}
컨피규레이션 설정하기
spring.application.name=client-service
server.port=${PORT:8081}
eureka.client.serviceUrl.defaultZone=${PEUREKA_URL:http://localhost:8761/eureka/}
EUREKA_URL
: 디스커버리 서버 네트워크 주소- 클라이언트 리스닝 포트는 PORT 환경변수로 정의할 수 있다
이제 두 개 인스턴스를 실행해보자
java -jar -DPORT=8081 study-spring-cloud-eureka-client-0.0.1-SNAPSHOT.jar
java -jar -DPORT=8082 study-spring-cloud-eureka-client-0.0.1-SNAPSHOT.jar
아래 서버측 API를 통해 두 인스턴스가 등록되었는지 확인해보자 http://localhost:8761/eureka/apps
<applications>
<versions__delta>1</versions__delta>
<apps__hashcode>UP_2_</apps__hashcode>
<application>
<name>CLIENT-SERVICE</name>
<instance>...</instance>
<instance>...</instance>
</application>
</applications>
인스턴스 설정
인스턴스 아이디 : ${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}
ex : 192.168.0.106:client-service:8082
다르게 설정하고 싶다면
eureka.instance.instanceId=${sprnig.application.name}-${SEQUENCE_NO}
client-server-1