Spring Cloud Netflix Eureka
Spring Registry
각 서비스를 Spring Cloud Eureka에 등록
각각의 서비스가 자신의 위치(IP) 정보를 특정 서버에 등록 Registry하는 작업을 말한다. Spring Cloud Eureka client를 사용
Service Discovery
Eureka가 해주는 역할을 Service Discovery 라고 함
각각의 서비스의 위치가 등록된 서버에서 특정 작업을 위한 서버의 위치를 파악하는 작업이다. Spring Cloud eureka server을 사용
외부에서 다른 서비스들이 마이크로 서비스들을 검색하기 위해 사용한는 개념
Eureka Service Discovery - 프로젝트 생성
maven 프로젝트
java 11
Dependencies로 Spring Cloud Discovery > Eureka Server 추가
@EnableEurekaServer 어노테이션으로 EurekaServer 자격으로 등록
package com.example.discoveryservice;
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);
}
}
application.yml
server:
port: 8761
spring:
application:
name: discoveryservice # 각 마이크로 서비스의 고유한 ID 부여
# eureka 설정
# ture이면 eureka에 등록됨 (자기 자신에게 등록되는 꼴)
eureka:
client:
register-with-eureka: false
fetch-registry: false
http://localhost:8761 -> Eureka 대쉬보드
User Service - 프로젝트 생성
Dependencies
lombok
spring web
spring boot dev tools
Eureka discovery Client
@EnableDiscoveryClient 추가
@EnalbeEurekaClient 는 @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);
}
}
application.yml
server:
port: 9001
spring:
application:
name: user-service
eureka:
client:
register-with-eureka: true
# Eureka 서버로부터 인스턴스들의 정보를 주기적으로 가져올 것인지를 설정하는 속성
# true이면 갱신된 정보를 받겠다는 설정
fetch-registry: true
# Eureka 서버의 위치 폴더 설정
service-url:
defaultZone: http://127.0.0.1:8761/eureka
http://127.0.0.1:8761 확인
UP 작동 중
DOWN 작동 X
User Service - 등록
edit-configuration에서 동일한 어플리케이션 복사해서 실행
9001번 포트가 이미 실행 중이라서 중지됨 (포트 충돌)
해결 : vm Option에 추가
-Dserver.port=9002 => 포트번호를 9002로 변경해서 실행
http://127.0.0.1:8761 확인
둘다 정상 작동중
클라이언트 요청이 오면 Discovery Service 에서 둘 중 어떤 인스턴스가 살아있는지 gateway나 routing service에게 전달해서 분산처리를 하게 됨
인텔리제이 커맨드 라인에서 실행
mvn spring-boot:run -Dspring-boot.run.jvmArguments='-Dserver.port=9003'
인스턴스 총 3개
터미널에서 실행
mvn compile package
java -jar -Dserver.port=9004 ./target/user-service-0.0.1-SNAPSHOT.jar
인스턴스 총 4개
하나의 서비스를 여러 포트로 실행하는 것이 귀찮은 작업!!
spring boot에서 간단하게 하는 처리 방법 (random port) 제공
User Service - Load Balancer
application.yml
server:
port: 0 # random port 실행함
터미널(port 57848 확인가능)
0번 포트에 마우스 올리면 아래서 확인가능
❯ mvn spring-boot:run 으로 다시 실행 (random port로 옵션 필요 없음)
Eureka에서 확인하면 하나로 확인됨
ip + Service Name + port번호로 status가 구성되어 있어서 인스턴스는 한개 밖에 보이지 않게 됨
해결 : application.yml 에 추가
eureka:
instance:
instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
instance-id를 설정해줘서 status에 2개의 인스턴스가 나오게 됨(로드 밸런싱) -> 라운드 로빈방식으로 처리
링크에 마우스 올리면 하단에서 ip와 포트번호 확인가능
'Spring > [인프런] Spring Cloud' 카테고리의 다른 글
Catalogs, Orders Microservice (0) | 2022.06.19 |
---|---|
Users Microservice (0) | 2022.06.18 |
E-commerce 어플리케이션 (0) | 2022.06.18 |
API Gateway Service (0) | 2022.06.17 |
Microservice와 Spring Cloud 소개 (0) | 2022.05.28 |