안녕하세요. 직장에서 유레카를 소개하는 중이라 연습한 내용을 연습하고 기록한다.
Eureka는 Spring에서 제공하는 Discovery 서버로 다양한 서비스를 등록하는 저장소 개념을 가지고 있다.
나는 세부 사항을 별도로 정리합니다.
오늘은 약간의 개념과 실습을 가지고 왔습니다~
유레카 디스커버리 서버 생성
- application.yml 설정
eureka:
client:
registerWithEureka: false
fetchRegistry: false
- registerWithEureka : 서비스가 Eureka에 등록되어야 하는지 여부를 결정합니다.
- fetchRegistry: Eureka 서버에 등록된 레지스트리를 로컬에 캐시할지 여부
먼저 다양한 서비스를 등록하려면 Eureka 서버가 필요합니다.
Eureka 서버에 등록된 다양한 서비스를 클라이언트-서버라고 하며 각 Client-Server-Application.yml에서 true로 설정됩니다.
Eureka 서버에 등록할 필요가 없기 때문에 false로 설정합니다.
유레카 클라이언트 서버 등록
- 유레카 디스커버리 클라이언트 설치
@SpringBootApplicaiton
@EnableDiscoveryClient
Eureka 서버에 클라이언트-서버 앱을 등록하려면 @SpringBootApplication 아래에 @EnableDiscoveryClient를 추가하세요. 이름에서 알 수 있듯이 클라이언트-서버임을 나타내는 주석입니다.
- Application.yml
spring:
application:
name: user-service
profiles:
active: default
eureka:
instance:
preferIpAddress: true # 서비스 이름 대신 IP 주소 등록
client:
registerWithEureka: true # 유레카에 서비스 등록
fetchRegistry: true # 유레카 서버에 등록된 레지스트리를 로컬에 캐싱
serviceUrl:
defaultZone: <http://localhost:8761/eureka/> # 유레카 서버 위치
- Eureka 구성 외에도 Spring 구성에서 가장 중요한 것은 애플리케이션 이름입니다.
여러 클라이언트에 동일한 이름을 지정하면 동일한 서비스가 여러 개 등록됩니다.
자세한 내용은 아래 녹음을 참조하십시오. - 가져오기 레지스트리: true
- Eureka 서버에서 인스턴스 정보를 주기적으로 검색할지 여부를 선택합니다.
- Eureka 서버에서 인스턴스 정보를 주기적으로 검색할지 여부를 선택합니다.
- 서비스 URL
- defaultZone : 서버 기본 위치. 주소를 입력하면 유레카 서버에 등록된 인스턴스(클라이언트-서버)를 확인할 수 있습니다.
- defaultZone에 등록된 서버에 접속할 때 인스턴스 상태가 높으면 클라이언트 서버가 유레카 서버에 성공적으로 업로드된 것입니다.
- defaultZone : 서버 기본 위치. 주소를 입력하면 유레카 서버에 등록된 인스턴스(클라이언트-서버)를 확인할 수 있습니다.
여러 애플리케이션 서비스 실행
이것은 다른 포트 번호로 동일한 서비스를 실행하는 사소하고 방법입니다.
총 3가지 방법이 있습니다: 포트 번호 직접 지정(실행 구성/명령으로 실행) 또는 임의 실행.
1. 구성 실행
- 포트 9002 및 9001이 있는 두 서비스가 정상적으로 업로드됨
- 그 후 동적 라우팅은 API 게이트웨이 등과 함께 작동합니다.
2. 터미널로 실행
mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Dserver.port=9003"
빌드 컴파일
mvn compile package
- JAR 파일 생성
java -jar -Dserver.port=9004 ./~/*.jar
- 특정 포트 번호로 인스턴스 실행
- 수동으로 포트 번호를 입력하지 않고 부팅 시 이를 자동으로 처리하는 방법이 있습니다.
3. 임의의 포트 할당
server-port가 0으로 설정되면 포트가 실행될 때마다 자동으로 설정됩니다.
- Application.yml
server:
port: 0
spring:
application:
name: user-service
임의의 포트로 실행
mvn spring-boot:run
- 하지만 여러 서버를 운영한 후 원래 오토서버의 url로 이동하여 확인해보면 가용영역에 하나만 등록되어 있는 것으로 나타납니다.
→ yml에 표시된 포트 번호가 동적으로 할당된 포트가 아니기 때문입니다.
임의의 포트를 여러 개 실행해도 하나의 인스턴스로 나타납니다. - 이 문제를 해결하려면 인스턴스 ID도 무작위화해야 합니다.
인스턴스 ID 무작위화
- application.yml에 설정 추가
eureka:
instance:
instance-id: ${spring.cloud.client.hostname}:${spring.applicaiton.instance.id:${random.value}}
위와 같이 설정하고 두 가지 서비스를 실행합니다.
체크를 하면 여러 인스턴스가 등록되어 있는 것을 확인할 수 있습니다.