1

我正在建立一个基于微服务的应用程序,其中聚合层/ API网关调用微服务。尤里卡用于服务发现和功能区提供负载均衡RestTemplate。Eureka Ribbon LoadBalancer缓存更新延迟

邮递员调用汇总 - >汇总调用使用Eureka/Ribbon/RestTemplate的微服务。

我有4个不同的端口上运行我的机器上的一个微服务类型的实例。重复触发相同的REST端点邮差导致请求以循环方式适当地获得负载平衡。

当我停止其中一个微服务实例时,该服务从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 

尤里卡服务器:

@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 

回答

0

造成这是尤里卡智能感知使关机情况下有更多的时间来讨论这一问题。智能感知以这种方式在同一个盒子上运行同名多个微服务。

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