Netflix OSS를 사용하고 있는 Spring Cloud로 application architecture를 개발을 하고 있습니다.
기본적으로 Eureka 서버에서 서버 목록을 가져 오기 전에 30초 동안 기다리고 나서 리본의 로드 밸런서를 사용해서 특정 서비스로 라우팅을 할 수가 있습니다.
위와 같은 문제는 개발환경이 dev, local인 경우 빈번히 restart를 하는데 결과를 보려고 할 때마다 30초를 기다려야하는 고통이 따른다.
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
server.port=8761
spring.application.name=eureka-server
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone = http://127.0.0.1:8761/eureka
eureka.instance.ip-address=true
spring.application.name=appName
server.port=9999
eureka.instance.prefer-ip-address=true
eureka.client.service-url.defalutZone=http://127.0.0.1:8761/eureka
유레카 서버에 ‘appName’으로 등록이 되면 plain URL 대신 리본의 로드밸런스 RestTemplate와 appName (service name)으로 접근이 가능하다. http://localhost -> http://appName으로 remote call이 가능하게 된다. 이렇게 유레카 서버에 등록된 서비스명으로 접근하기 위해선 최소 30초의 초기화시간이 필요하다.
logging:
level:
com:
netflix:
loadbalancer: debug
$ tail -f appName.log | grep "addServer\|clearing"
DEBUG 19080 --- [erListUpdater-0 c.netflix.loadbalancer.BaseLoadBalancer : LoadBalancer [appName_defaultzone]: addServer [192.168.0.14:9999]
addServer 까지의 시간이 30초가 걸린다.
eureka.instance.leaseRenewalIntervalInSeconds
클라이언트에서 설정 할 수 있다.eureka.server.response-cache-update-interval-ms
로 설정할 수 있으며 기본 값은 30초 이다.eureka.client.registryFetchIntervalSeconds
설정할 수 있다.ribbon.ServerListRefreshInterval
or <clientName>.ribbon.ServerListRefreshInterval
으로 설정을 할 수가 있다.참조
http://lifeinide.com/post/2017-12-07-instant-ribbon-client-init-with-eureka/