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

造成這是尤里卡智能感知使關機情況下有更多的時間來討論這一問題。智能感知以這種方式在同一個盒子上運行同名多個微服務。

當服務部署在不同的盒子上時,這個問題不會出現。