ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Cloud Netflix Eureka
    BackEnd/Spring Cloud 2022. 6. 18. 09:33
    반응형

    Spring Cloud Netflix Eureka

      Spring Cloud Netflix Eureka는 Service Discovery 입니다. Service Discovery란 MSA와 같은 분산 환경에서 활성중인 서비스 인스턴스들을 관리하는 것을 말합니다. Cloud 환경에서 Auto-scaling, 생성, 삭제, 확장 등을 통해 IP주소나 Port들이 동적으로 변경되어도 서비스 클라이언트가 서비스를 호출할 때 서비스의 위치를 알 필요가 없습니다. Eureka는 단지 서비스의 위치만을 표현하는 역할로 보통 Spring Cloud Gateway와 같은 클라이언트 사이드 로드밸런서와 함께 동작합니다.

     

    Spring Cloud Netflix Eureka 동작 순서

    Eureka Server 기동

      > Eureka Client(Eureka Server에 등록될 서비스들) 기동

        > Eureka Server는 자신에게 등록된 Eureka Client에게 ping을 보내 Health Checking 수행 (30초 주기)

          > Heart Heat가 일정 횟수 이상으로 동작하지 않으면 Eureka Server는 해당 Client 삭제

     

    Eureka Server(Service Discovery)

      활성중인 서비스 인스턴스들을 관리합니다. Spring Cloud Netflix - Eureka Server를 사용합니다.

     

    • 프로젝트 생성 (Create New Project > Spring Initializr)
    • Dependencies (Spring Cloud Discovery > Eureka Server)

    plugins {
        id 'org.springframework.boot' version '2.6.8'
        id 'io.spring.dependency-management' version '1.0.11.RELEASE'
        id 'java'
    }
    
    group = 'com.example'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = '11'
    
    repositories {
        mavenCentral()
    }
    
    ext {
        set('springCloudVersion', "2021.0.3")
    }
    
    dependencies {
        implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
    }
    
    dependencyManagement {
        imports {
            mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
        }
    }
    • application.yml
    server:
      port: 8761
    
    spring:
      application:
        name: discovery-service
    
    eureka:
      client:
        # 해당 서버를 서비스로 등록할지에 대한 속성입니다.(default: true)
        register-with-eureka: false
        fetch-registry: false
    • @EnableEurekaServer 설정
    package com.example.servicediscovery;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    @SpringBootApplication
    @EnableEurekaServer
    public class DiscoveryServiceApplication {
    
      public static void main(String[] args) {
        SpringApplication.run(DiscoveryServiceApplication.class, args);
      }
    
    }
    • Dashboard

     

    Eureka Client(Service Registry)

      각각의 서비스는 자신의 위치(IP주소와 Port) 정보를 Eureka Server에 등록합니다. Eureka Server에 등록하기 위해 Spring Cloud Netflix - Eureka Client를 사용합니다.

     

    • 프로젝트 생성 (Create New Project > Spring Initializr)
    • Dependencies (Spring Cloud Discovery > Eureka Discovery Client)

    plugins {
        id 'org.springframework.boot' version '2.6.8'
        id 'io.spring.dependency-management' version '1.0.11.RELEASE'
        id 'java'
    }
    
    group = 'com.example'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = '11'
    
    configurations {
        compileOnly {
            extendsFrom annotationProcessor
        }
    }
    
    repositories {
        mavenCentral()
    }
    
    ext {
        set('springCloudVersion', "2021.0.3")
    }
    
    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-web'
        implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
        compileOnly 'org.projectlombok:lombok'
        developmentOnly 'org.springframework.boot:spring-boot-devtools'
        annotationProcessor 'org.projectlombok:lombok'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
    }
    
    dependencyManagement {
        imports {
            mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
        }
    }
    • application.yml
    server:
      port: 0 # random port
    
    spring:
      application:
        name: user-service
    
    eureka:
      # instance 식별을 위한 instance 정보를 등록합니다.
      instance:
        instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
      client:
        # 해당 서버를 서비스로 등록할지에 대한 속성입니다.(default: true)
        register-with-eureka: true
        fetch-registry: true
        service-url:
          defaultZone: http://localhost:8761/eureka
    • @EnableDiscoveryClient 설정
    package com.example.userservice;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    public class UserServiceApplication {
    
      public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
      }
    
    }
    • Dashboard

     

     

     

    [참고 정보]

    반응형

    'BackEnd > Spring Cloud' 카테고리의 다른 글

    Spring Cloud Config  (0) 2022.07.02
    Spring Cloud Gateway  (0) 2022.06.22
    Spring Cloud  (0) 2022.06.09
    MSA(Microservice Architecture)  (0) 2022.06.08
    Cloud Native Application  (0) 2022.05.28

    댓글

Designed by Tistory.