스프링클라우드 실습용이며 10분이면 가능합니다.
Spring Cloud Netflix Eureka를 실습해보겠습니다.
넷플릭스에서 만들어서 오픈소스로 공유되었습니다.
이 유레카를 올리면 Service Discovery 역할을 하게 됩니다.
Service Discovery란 무엇이냐?
우리가 LoadBalancer를 통해 요청을 받게 되면, Service Discovery가 각각 포트별로 올려져 있는 서비스를 찾아서 api를 전달해줍니다.
오늘 할일은
1.유레카 서버 만들기
2.클라이언트 2개만들어서 유레카 서버에 붙기.
준비물: IntelliJ
Java - 17 저는 17을 사용했습니다.
1.프로젝트 만들기
새 프로젝트 -> Spring Initializr 을 선택해줍니다.
저는 자바 17버전을 사용하였습니다.
다음을 누르고, 부트 버전은 SNAPSHOT 3.1.8을 선택하였고, 검색필터에서 찾지 마시고 아래로 내려서
Eureka Server를 선택해줍니다.
pom.xml 에 들어가서 spring cloud version 을 확인해줍니다.
이후 main 파일에 들어가서
@EnableEurekaServer 어노테이션을 등록해주자.
이제 application.yml 파일을 수정해주자.
일단 파일명을 yml로 바꿔주도록하자. -> application.yml 로 변경하기
server:
port: 8761
spring:
application:
name: discoveryservice
eureka:
client:
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
register-with-eureka 는 본인건 스스로는 등록안하겠다 라는 뜻이다.
이제 프로젝트를 실행해보자.
그리고
http://localhost:8761/
주소로 들어가서 실행된 service discovery를 살펴보도록 하자.
정상 작동됨을 확인할 수 있다!
http://127.0.0.1:8761/
위 주소로 들어가도 가능하다.
이제 유레카 서비스를 올렸으니, 샘플 서비스를 만들어서 여기에 등록해보도록 하자.
이렇게 하나 만들어주고
디펜던시를 추가해준다.
*주의사항: 아까 만든 유레카 서버와 동일한 버전의 Spring Boot 버전을 선택해야한다! (호환성)
디펜던시로는
첫번째 - Eureka Discovery Client
두번째 - Lombok, Spring Boot DevTools, Spring Web
이후 프로젝트를 생성해준다.
그리고 main 파일에 들어가서 annotation을 추가해준다.
@EnableDiscoveryClient
그리고 나서 설정파일 application.properties 를 application.yml로 파일명을 바꿔준다.
그리고 아래와 같이 내용을 입력해준다.
내가 만들 서비스의 포트는 9001이고, 이름은 user-service1로 등록한다.
그리고 유레카서버는 defaultZone 은 아까만든 포트 8761이다. 그리고 아까와는 다르게 register-with-eureka: true로 해준다.
server:
port: 9001
spring:
application:
name: user-service1
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://127.0.0.1:8761/eureka
이제 실행을 해주고 아까 만든 유레카 사이트에 들어가보면?
정상으로 user-service1이 등록되었다는 걸 알 수 있다.
그리고 사실 discoveryservice는 아래와 같이 안나오는게 맞다. 아까 false를 했으니깐!! 꼭 유의하자.
Status에 up이면 정상인상태이다. down은 서버가 내려간 상태이다.
실행 버튼 옆에 설정화면에 들어와서 복제를 해주고 이름을 2를 붙여준다.
build option으로 vm options 에 -Dserver.port=9002 를 적어준다.
그러면 2번은 9002번 포트로 실행이 되게 된다.
이후 9002포트로 만든 2번을 실행해보면!
이렇게 2개가 등록이 된다.
끝.!
이아니고 포트를 0으로 바꿔서도 해보자!
그러면 0으로 나오면서 마우스를 올려보면 좌측하단에 포트가 나온다!
이게바로 랜덤포트이다.
그리고
instance-id 가 중복되기 때문에, 아래와 같이 입력해준다.
server:
port: 0
spring:
application:
name: user-service1
eureka:
instance:
instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://127.0.0.1:8761/eureka
그럼 이렇게 2개로 나뉘어져서 잘 보인다!
정말 끝.