RATSENO

[Spring]Spring Cloud Netflix - Eureka[2] 본문

DEV/SPRING

[Spring]Spring Cloud Netflix - Eureka[2]

RATSENO 2020. 1. 29. 12:40

이전 포스팅 : https://ratseno.tistory.com/59

 

[Spring]Spring Cloud Netflix - Eureka[1]

Spring Cloud Netfilx 프로젝트는 Spring Boot를 통하여 Neflix OSS를 사용할 수 있는 프로젝트입니다. 이 프로젝트를 통하여 MSA 환경에 적합한 환경을 구축할 수 있습니다. https://cloud.spring.io/spring-clou..

ratseno.tistory.com

이전 포스팅에 이어서 Eureka를 적용해 보겠습니다.

이번 포스팅에서는 employee-consumer 모듈을 이용하여 service discovery(서비스 탐색)을 할 것입니다.

서비스가 등록되어 관리될 eureka server 모듈을 생성하겠습니다.

이전 포스팅에서 작성한 모듈들과 동일하게 maver project로 생성하겠습니다.

eureka server - 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>eureka-server</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>eureka-server</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.2.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.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</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>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

maven project로 생성하였기 때문에 main class를 생성하겠습니다.

(spring boot 프로젝트로 생성하셨을 경우 main class가 자동 생성되기 때문에 생략하셔도 됩니다.)

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

 

Spring boot 프로젝트로 생성하신 분들은 @EnableEurekaServer 어노테이션만 추가하시면 되며,

maven 프로젝트로 생성하신 분들은 @SpringBootApplication, @EnableEurekaServer 두 개의 어노테이션을 추가하셔야 합니다.

@EnableEurekaServer 어노테이션은 해당 애플리케이션이 EurekaServer임을 선언하는 것입니다.

 

마지막으로 Eureka Server 어플리케이션이 가동할 port를 지정해 줍니다.

Eureka Server에서 내부적으로 사용하는 port번호는 8761이므로 8761로 설정합니다.

(다른 포트 번호를 사용할 경우 추가적인 셋팅이 필요하다고 합니다. 이에 대해서는 아직 조사가 필요한 부분입니다.)

 

resources폴더 아래 application.properties파일에 해당 설정을 작성합니다. 파일이 없을 경우 생성하시면 됩니다.

server.port=8761

Eureka Server를 Run 후 http://localhost:8761/ 로 이동하게 되면

Spring Cloud Eureka에서 제공하는 Eureka Page를 확인하실 수 있습니다.

 

서비스를 등록할 Eureka Server의 기본적인 셋팅이 끝났습니다.

이제는 Eureka Server에 등록할 employee-producer 모듈을 수정해 보도록 하겠습니다.

 

employee-producer 모듈의 pom.xml에 spring cloud dependency를 추가하겠습니다.

<?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-producer</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.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </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>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

다음으로는 main class에 annotaion을 추가하겠습니다.

package com.example;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class SpringBootHelloWorldApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootHelloWorldApplication.class, args);
    }
}

Spring Boot Microservice를 클라이언트 애플리케이션으로 활성화하여 Eureka Server에 등록하고 추가하기 위한 어노테이션이 @EnableDiscoveryClient 어노테이션입니다.

 

application.properties 파일에 실행 중인 eureka-sever의 url을 지정합니다.

eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka

employee-producer 모듈과 eureka-server 모듈을 실행한 후

http://localhost:8761/로 접속하게 되면 eureka serveremployee-producer가 등록되어 있는 것을 확인할 수 있습니다.

 

위의 결과 페이지에서 볼 수 있듯이, Application에 UNKNOWN으로 나오고 있습니다.

resources폴더 아래 bootstrap.properties파일을 생성하여 employee-producer 애플리케이션의 이름을 지정하겠습니다.

spring.application.name=employee-producer

다시 서버를 재기동 후 확인하면 해당 내용이 바뀐 것을 볼 수 있습니다.

다음 포스팅에서는 eureka-server에 등록된 eureka client(employee-producer)를 eureka-server를 통하여 호출해보도록 하겠습니다.

 

Github : https://github.com/RATSENO/spring-cloud-example/blob/master/README.md

Comments