⌗ Eureka Server ?!
Spring Cloud Eureka는 넷플릭스에서 만든 서비스로,
서버들을 중앙 레지스트리에 등록하고 장애가 발생할 때 자동으로 제외, 새로운 서비스가 발견되면 자동으로 실시간으로 반영하는 도구이다.
・ Eureka Server 와 Eureka Client 구조를 통해 Service Registry & Service Discovery 를 가능케 한다.
・ 클라이언트가 Eureka 서버에 등록되면 호스트, 포트, 상태 표시 URL, 기타 세부 정보와 같은 자체에 대한 메타 데이터를 제공 (Registry) 하게 된다.
・ Eureka Server에서 클라이언트 측 에서 받은 정보를 Service Discovery를 통해 다른 클라이언트에게 전파하는 형태로 서비스가 된다. 이는 서비스는 호스트 이름과 포트를 하드 코딩하지 않고도 서로 검색하고 통신함으로써 서비스의 투입과 제거가 빠르게 이루어질 수 있다는 의미
・ Eureka 서버는 서비스에 속한 각 인스턴스로부터 Heartbeat 메시지를 수신한다.
・ Heartbeat가 시간 설정(기본 30초) 에 초과 된다거나 누락된다면 인스턴스는 레지스트리에서 제거하게 된다.
※ Eureka에 대한 공식 문서: https://cloud.spring.io/spring-cloud-netflix/reference/html/
1. Spring boot 기반의 Eureka 서버 프로젝트 생성
(1) Spring에서 제공하는 사이트 접속 : https://start.spring.io
(2) 아래의 설정값으로 Spring boot 기반의 Eureka 서버 프로젝트 생성
Project : Gradle Project
Language : JavaSpring Boot : 2.2.0
Project
Metadata - option - Packaging : JarProject
Metadata - option - Java : 8
Dependencies : Lombok, Spring web, MyBatis Framework
2. 프로젝트 실행 ⇢ FAIL
생성한 프로젝트를 스프링 부트 내장 톰캣을 이용해 실행하게 되면, 다음과 같이 실패나는 경우가 있다.
⌗ 오류
***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to configure a DataSource: 'url' attribute is not specified
and no embedded datasource could be configured.
Reason: Failed to determine a suitable driver class
Action:
Consider the following:
If you want an embedded database (H2, HSQL or Derby),
please put it on the classpath.
If you have database settings to be loaded from a particular
profile you may need to activate it (no profiles are currently active).
⌗ 원인
Springboot가 자동 시작될 때, 필요한 기본 설정이 설정되지 않아서 발생한 현상
⌗ 해결 방법
(1) src > main > java > ... > xxxApplication.java 에서 설정
⇢ Spring Boot Application에 @EnableEurekaServer 어노테이션을 등록하여 서비스 레지스트리가 가능하게 한다.
xxxApplication.java
package com.shardstudy.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
(2) src > main > resources > application.properties 제거 및 application.yml 파일 생성
properties 파일로 설정해도 되나, yml 파일이 관리하기 편해 변경했다. (참고: properties 파일 설정 방법은 다릅니다.)
Eureka 레지스트리도 자체 등록을 시도하므로 관련 옵션은 비활성화했으며, 로깅 레벨도 비활성화했다
application.yml
spring:
application:
name: eureka
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
- [참고] application.properties
spring.application.name=eureka
server.port=8761
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
#eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
logging.level.com.netflix.eureka=OFF
logging.level.com.netflix.discovery=OFF
#eureka.instance.hostname=localhost
3. 프로젝트 재실행 ⇢ SUCCESS
http://localhost:8761/ 로 접속 화면 - Eureka Server
'Java > Spring' 카테고리의 다른 글
[Spring] 롬복(Lombok) 라이브러리 테스트 코드 생성 (1) | 2020.02.12 |
---|---|
[Spring] 롬복(Lombok) 라이브러리 설치 (0) | 2020.02.11 |
[Spring] 간단한 API 생성 및 테스트 코드(MockMvc이용) 해보기 (0) | 2020.02.02 |
[SpringBoot] @SpringBootApplication 어노테이션 설명 (0) | 2020.02.02 |
[Spring Cloud] MSA에서 Service discovery 패턴 (0) | 2019.11.17 |
[Spring] Cannot determine embedded database driver class for database type NONE (0) | 2019.11.16 |