본문 바로가기

Java/Spring

[SpringBoot] Eureka sever 초기 구성

반응형

⌗ 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/

 

Spring Cloud Netflix

Spring Cloud Netflix offers a variety of ways to make HTTP requests. You can use a load balanced RestTemplate, Ribbon, or Feign. No matter how you choose to create your HTTP requests, there is always a chance that a request may fail. When a request fails,

cloud.spring.io

 


 

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 레지스트리도 자체 등록을 시도하므로 관련 옵션은 비활성화했으며, 로깅 레벨도 비활성화했다

  ⇢ https://docs.spring.io/spring-boot/docs/2.0.5.RELEASE/reference/htmlsingle/#boot-features-configure-datasource 참조.

 

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

Euerka Server 접속시, 초기화면

 

반응형

❥ CHATI Github