Sun's Blog

Spring Cloud Eureka 본문

ETC

Spring Cloud Eureka

버스는그만 2023. 8. 13. 11:35

Server

의존성

    <properties>
        <java.version>11</java.version>
        <spring-cloud.version>2021.0.8</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
  • spring boot starter 등록
  • Eureka를 사용하기 위한 spring-cloud-discovery에서 eureka-server를 등록

@EnableEurekaServer

@SpringBootApplication
@EnableEurekaServer
public class EcoomerceApplication {

    public static void main(String[] args) {
        SpringApplication.run(EcoomerceApplication.class, args);
    }

}
  • @EnableEurekaServer는 이 프로젝트를 유레카 서버로써 등록시킨다는 어노테이션

Application.yml

server:
  port: 8761

spring:
  application:
    name: discoveryservice

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
  • Eureka 서버의 기본 포트는 8761
  • spring.application.name: 각 마이크로서비스의 id로써의 이름
  • register-with-eureka: 자신의 정보를 유레카에 등록하지 않는다는 뜻, 유레카 서버가 유레카서버에 등록 될 필요는 없다.(기본값은 true)
  • fetch-registery: 주기적으로 유레카 서버로부터 인스턴스들의 정보를 주기적으로 가져올 것인지를 설정하는 정보(true)

Client

의존성

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
  • 서버와 다른 점은 이번에는 Eureka Server 말고 Eureka Client를 등록해준다.

@EnableDiscoverClient

@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }

}
  • @EnableDiscoveryClient 혹은 @EnableEurekaClient를 등록해준다.
  • 아마 Discovery 쪽이 더 넓게 사용할 수 있는 걸로 알고있다.

Application.yml

server:
  port: 9001

spring:
  application:
    name: user-service

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka
  • eureka.client.service-url.defaultZone: 유레카 서버의 url

실행 시 http://localhost:8761에 접속하면 user-service가 등록됨을 확인 할 수 있다.(당연하지만 유레카 서버 또한 실행상태여야 한다.)

포트 번호 정하기

  • 만약 클라이언트를 여러 개 실행해야하는 상황에서 포트 번호를 매번 정하기 귀찮다면 server.port=0 으로 하면 랜덤 포트를 사용할 수 있다.(SpringBoot에서 지원)

그런데 이렇게 클라이언트를 여러 개 실행하고 나서 유레카 서버를 확인해보니 등록되어 있는 클라이언트가 1개로만 보인다. 이유는 처음 properties 혹은 yml 파일에 정해진 포트 0번으로 등록되고 동적으로 등록된 포트는 무시되기 때문에 다 같은 도메인으로 보기 때문이다. 이럴때는 아래와 같이 client에 추가로 설정해 준다.

server:
  port: 0

spring:
  application:
    name: user-service

eureka:
  instance:
    instance-id: ${spring.cloud.client.hostname}:${spring.application.name:${random.value}}
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka
  • 기존의 유레카 서버에 등록되는 id 값을 바꿔주자

'ETC' 카테고리의 다른 글

팝업, 모달 그리고 토스트 메시지  (0) 2023.08.14
Spring Cloud Gateway  (0) 2023.08.13
Microservice와 Spring Cloud 소개  (0) 2023.08.12
Java - Record  (0) 2023.08.09
[10분 테코톡] 베리의 RESTful API  (0) 2023.08.07