Eureka Ribbon LoadBalancer缓存更新延迟

时间:2017-02-16 04:50:14

标签: spring-boot microservices netflix-eureka service-discovery netflix-ribbon

我正在建立一个基于微服务的应用程序,其中聚合层/ API网关调用微服务。 Eureka用于服务发现,Ribbon用于提供负载平衡RestTemplate。

邮差调用聚合 - >聚合使用Eureka / Ribbon / RestTemplate调用Micro服务。

我的机器上有4个不同端口上运行的4个微服务类型的实例。重复击中相同的REST端点Postman会使请求以循环方式正确地进行负载平衡。

当我停止其中一个微服务实例时,服务从Eureka注销,但LoadBalancer仍然向死服​​务发送请求,并且调用失败。

以下是我的代码:

聚合:

 @Configuration
    @ComponentScan(basePackages = {"com.mycompany.aggregator"})
    @EnableAutoConfiguration
    @EnableEurekaClient
    public class AggregatorApplication {

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

**Configuration:**
@Configuration
public class AggregatorConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

@Configuration
@RibbonClient(name="microservice", configuration = FooConfig.class)
public class TestConfig {
}

// FooConfig被排除在组件扫描

之外
@Configuration
public class FooConfig {

    @Bean
    public IPing ribbonPing(IClientConfig config) {
        return new NIWSDiscoveryPing();
    }

    @Bean
    public IRule ribbonRule(IClientConfig config) {
        return new AvailabilityFilteringRule();
    }
}

restTemplate调用:

ResponseEntity<Object> responseEntity = restTemplate.getForEntity(myUrl, Object.class);

属性:

spring.application.name=aggregator
server.contextPath=/ott
server.port = 8090
my.url=http://microservice
eureka.instance.leaseRenewalIntervalInSeconds=1
eureka.instance.leaseExpirationDurationInSeconds=2

MicroService代码:

@SpringBootApplication
@EnableEurekaClient
public class MicroServiceApplication

属性:

spring.application.name=microservice
server.contextPath=/ott
server.port = 9000
eureka.instance.leaseRenewalIntervalInSeconds=1
eureka.instance.leaseExpirationDurationInSeconds=2

Eureka Server:

@SpringBootApplication
@EnableEurekaServer
public class EurekaserverApplication {

属性:

server.port=8761

eureka.server.enableSelfPreservation=false
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=false

logging.level.com.netflix.eureka=OFF
logging.level.com.netflix.discovery=OFF

1 个答案:

答案 0 :(得分:0)

造成这种情况的问题是,Eureka intellisense为关机实例提供了更多时间。 intellisense以同样的方式在同一个盒子上运行多个微服务。

当服务部署在不同的盒子上时,这个问题就不会出现了。