2016-11-06 3 views
0

Ich teste Frühling Wolke Schutzschalter und ich vermisse den Punkt, wie man tatsächlich „circuitBreaker.requestVolumeThreshold“ Parameter funktioniert eigentlich ... mein Beispiel ansehen ...circuitBreaker.requestVolumeThreshold funktioniert nicht wie erwartet

@HystrixCommand(
      fallbackMethod = "invokeMicroServiceFallback", 
      commandProperties = { 
       @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", 
         value = "30000"), 
       @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", 
         value = "2"), 
       @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", 
         value = "500"), 
       @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", 
         value = "180000") 
      }, 
      threadPoolProperties = { 
       @HystrixProperty(name = "coreSize", value = "30"), 
       @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", 
         value = "180000") 
      }) 
    public void invokeMicroService() { 
     final RestTemplate restTemplate = new RestTemplate(); 

     final ServiceInstance serviceInstance = loadBalancer.choose("personsService"); 
     if (serviceInstance != null) { 
      System.out.println("Invoking instance at URL: "+serviceInstance.getUri()); 
      System.out.println("Result :"+ 
        restTemplate.getForObject(serviceInstance.getUri()+"/persons", 
          String.class)); 
     } else { 
      System.out.println("Service is down..."); 
      throw new IllegalStateException("PersonsService is not running!"); 
     } 
    } 

    public void invokeMicroServiceFallback() { 
     System.out.println("Waiting for circuit-breaker to close again..."); 
    } 

Wenn ich drehe den personsService nach unten und rufen invokeMicroService in der Schleife dann habe ich eine Menge Ausgang bekam wie:

Erstens:

Invoking instance at URL: <URL at my service>; 
    "Waiting for circuit-breaker to close again..." 

dann nach einiger Zeit, j ust wiederholt:

Service is down... 
    "Waiting for circuit-breaker to close again..." 

was hier eigentlich circuitBreaker.requestVolumeThreshold tut? Warum habe ich mehr als zwei Versuche, auf PersonenService zuzugreifen?

Dank im Voraus ...

Antwort

-1

Anfrage Threashold Volumen controling Anzahl gleichzeitiger theads ist, kann ausgeführt werden dürfen.

0

aus dem Wiki https://github.com/Netflix/Hystrix/wiki/Configuration#circuitBreaker.requestVolumeThreshold

circuitBreaker.requestVolumeThreshold

Diese Eigenschaft legt die minimale Anzahl von Anfragen in einem Rollfenster , welche die Schaltung auslöst. Wenn zum Beispiel der Wert 20 ist, dann werden, wenn nur 19 Anfragen im rollenden Fenster (z. B. ein Fenster mit 10 Sekunden) empfangen werden, die Schaltung nicht ausgelöst, auch wenn alle 19 ausgefallen sind.

Verwandte Themen