레이블이 eureka인 게시물을 표시합니다. 모든 게시물 표시
레이블이 eureka인 게시물을 표시합니다. 모든 게시물 표시

2020년 6월 27일 토요일

Spring boot Eureka 해보자

Spring boot Cloud Eureka 

마이크로서비스에서 다수의 서버들에 대한 정보를 관리하는게 필요하다. 유레카가 그거다. 유레카서버를 두고 각 클라이언트들이 유레카서버에 등록하면 된다.
스프링부트에서는 의존성추가해서 서버-클라이언트 지정하면 끝. 노드제이에스 같은경우 라이브러리로 가능.

유레카 서버는 음..그냥 현재 클라우드에 구성된 하위 마이크로 서비스들에 대한 구성값을 저장할 뿐이다. 사용자의 요청에 따른 라우팅 , 또는 로드밸런싱을 위해서는 Zuul 서비스를 연동한다.

유레카 서버는 30초마다 등록된 클라이언트에 핑을 보내서 이용가능한 서비스인지 확인하다. 로드밸런싱을 위해 리본(클라이언트 로드밸런서?) 를 사용한다.

1. Spring boot Cloud Eureka Server
의존성과 포트 설정만 지정하면 일단 서버 기동은 끝. 스프링부트 정말 좋다.
- spring initializr 사이트에서 eureka 의존성 추가해서 프로젝트 생성, web도 추가.
다른언어로 개발됬거나 별도로 디스커버리서버(유레카 서버가 들고 있는정보) 가 필요할때는 제공되는 유레카 API를 이용한다.
( /eureka/apps, euraka/instance 등등..)

implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'

- application.yml 에 서버 설정
server:
port: 8761 <-- 포트는 맘대로 보통 8761 인가보다

# -- Eureka
eureka:
instance:
hostname: 127.0.0.1
client:
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
register-with-eureka: false <-- 서버자신이 유레카에 등록할지를 결정, 지가 서버이면서 클라이언트도 가능
fetch-registry: false <-- 클라이언트들이 로컬에 서버로부터 받은 클라이언트리스트정보를 로컬에 캐싱할지 결정 server: enable-self-preservation: false <-- true일때는 클라이언트가 죽어도 서버에서 죽지 않은걸로 인식, 보통 false 다

- application에 유레카 서버라고 설정
@EnableEurekaServer
@SpringBootApplication
public class DemoApplication {

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

}
이제 서버주소만 입력해도 정보가 출력된다. 유레카!
** resource 밑에 static, template가 있으면 화이트 지랄 화면이 보인다. 폴더 지우고 리빌드 하고 실행.
여러대의 서버에서 구성하고자 할떄는
spring:
profiles: default
application:
name: eureka-server-clustered
server:
port: 8761
eureka:
instance:
hostname: 192.168.0.103
client:
registerWithEureka: true
fetchRegistry: true
serviceUrl:
defaultZone: http://192.168.0.106:8761/eureka/,http://192.168.0.107:8761/eureka/
식으로 디폴트존을 여러개(서로 얽히게끔) 둔다. 일단 peer-to-peer 라고 서버상태를 전부 복제하는 방식이다.
https://projects.spring.io/spring-cloud/spring-cloud.html#_peer_awareness



2. Spring boot Cloud Eureka Client
유레카 클라이언트 의존성을 추가하고 actuator 도 의존성 추가필요. 액튜에이터가 있어야 서버가 클라이언트의 상태를 파악하지.
유레가 서버가 heartbeat 를 보내주는데, 클라이언트가 이를 못받으면 유레카서버는 클라이언트를 삭제한다.
클라이언트는 서버로부터 레지스트리(클라이언트목록)을 캐싱하고 주기적으로 변경사항을 점검한다
- 일단 의존성 추가
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
implementation 'org.springframework.boot:spring-boot-starter-actuator'

- application.yml 생성
server:
  port: ${PORT:8081}

spring:
  application:
    name: ${NAME:customerservice} <-- 같은 서비스를 여러개(여러서버)를 두고 서비스하고 싶을떄는 이름을 같게 하면
유레카에서 같은 이름끼리 묶어서 표시한다. 이를 zuul등에서 같은 service-id (serviceId: customerservice) 로 지정하면 라운드로빈 방식으로 서버를 돌아가며 요청한다. 따라서 같은 이름의 서비스서버중 1번 서버에는 출력'가'로 되는데, 2번 서버에는 출력'나'로 되어있으면 가->나->가->나..순으로 데이터가 표시된다.

eureka:
  client:
    serviceUrl:
    defaultZone: ${EUREKA_URL:http://127.0.0.1:8761/eureka/}
    enabled: true
  instance:
    preferIpAddress: true

- 애플리케이션이 유레카 클라이언트라고 지정
@EnableDiscoveryClient
@SpringBootApplication
public class EurekaclientApplication {

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

}
- 이제 유레카 서버페이지에 접속해서 새로고침하면 실행중인 클라이언트 목록이 보인다. 클라이언트의 스타터스를 클릭하면 클라이언트의 액튜에이터 정보페이지가 열린다.
- java -jar -DPORT=8082 -DNAME=taeho  eurekaclient-0.0.1-SNAPSHOT.jar


참고 떙큐
https://projects.spring.io/spring-cloud/spring-cloud.html#_peer_awareness
https://lion-king.tistory.com/12?category=855644
https://coe.gitbook.io/guide/service-discovery/eureka 
https://develop-yyg.tistory.com/5
https://jinhyy.tistory.com/52 <-- 위에게시물을 복불한곳 , 개념이 없는건지....