2016-06-10 11 views
1

Ich bin neu im Frühjahr Wolke Netflix und einige Fragen haben es über.
Ich bin mit dem API-Gateway zusammen mit Hystrix auf Zuul Edge-Server ausgeführt wird, und ich möchte sicherstellen möchte, wenn ich das folgende Verhalten richtig verstehen:Fallback-Methoden bei Zuul Server im Frühjahr Wolke

Ich töte einen Micro läuft „hinter“ API-Gateway dann zwinge ich hystrix zu Öffne die Schaltung. Danach (ca. 10 Sekunden) sende ich eine Anfrage an den nicht laufenden Microservice und erhalte TIMEOUT Fehler. Allerdings, wenn ich viele (Zehner) von Anfragen in kürzester Zeit (bis zu 1 Sekunde) senden, empfangen I KURZSCHLUSS OPEN-Fehler.
Ich war überrascht, warum ich TIMEOUT Fehler empfangen, obwohl die Schaltung offen ist, und daher sollte hystrix kommen solche Art von Fehlern zu vermeiden, zu spielen. Aber ich denke, der Grund ist, dass, wenn die Zeit seit dem letzten Anfrage> circuitBreaker.sleepWindowInMilliseconds, dann ist die API-Gateway versucht, die Micro zu verbinden erneut zu prüfen, ob es noch lebt, aber es war nicht so -> TIMEOUT. Das würde auch erklären, warum ich SHORCIRCUIT OPEN Fehler bei vielen Anfragen in kurzer Zeit bekommen habe.

Die nächste Sache ist, dass, wie ich „timeout“ oder „KURZSCHLUSS“ Fehler Ich habe:

HystrixRuntimeException: Microservice (timed-out | short-circuited) and no fallback available 

Wie kann ich einen Rückfall bei zuul Server angeben (dies ist das gleiche für alle Strecken sein kann) zu vermeide diese Ausnahme?
Was ich bisher versucht:

  • Nach this I Ausführung Isolationsstrategie gesetzt einzufädeln Time-out zu vermeiden:

    hystrix: command.default.execution.isolation.strategy: THREAD

aber nach an der hystrix.stream suchen bekam ich propertyValue_executionIsolationStrategy":"SEMAPHORE"

  • Es scheint durch das Schreiben eines benutzerdefinierten RibbonCommand und zwingenden getFallback(), ein Hinweis für Lösung auf github zu sein, aber an RibbonCommand Schnittstelle nach einem Blick. Ich habe herausgefunden, dass weder RibbonCommand noch seine Super Interfaces eine solche Methode definieren.

Mein API-Gateway-Service:

@SpringBootApplication 
@EnableSidecar // This annotation includes @EnableCircuitBreaker, @EnableDiscoveryClient, and @EnableZuulProxy 
@EnableHystrixDashboard 
public class ApiGatewayApplication { 

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

} 

application.yml

server: 
    port: 10000 
sidecar: 
    port: 8000 
endpoints: 
    restart: 
    enabled: true 
    shutdown: 
    enabled: true 
    health: 
    sensitive: false 
eureka: 
    client: 
    registerWithEureka: true 
    fetchRegistry: true 
    serviceUrl: 
     defaultZone: http://localhost:8761/eureka/ 
zuul: 
    routes: 
    microservice: 
     path: /microservice/** 

hystrix: 
    command.default.execution.isolation.strategy: THREAD 

debug: true 

Antwort

1

Die neueste Version Rückfall auf Zuul Ebene unterstützt. Dies geschieht, indem der ZuulFallbackProvider erweitert wird. Bitte besuchen Sie den folgenden Link für ein Beispiel: https://github.com/spring-cloud-samples/zuul-server/blob/master/src/main/java/zuulserver/ZuulServerApplication.java

Der Rückfall selbst auslösenden nicht für bestimmte Arten von Streckenkonfigurationen (für zB wenn Sie eine URL basierend config) erfolgt

„Diese einfachen URL-Routen don nicht als Hystrix-Befehl ausführen, noch können Sie mehrere URLs mit Ribbon laden. "

+0

sollten Sie erwägen eine Versionsnummer setzen die Benutzer auf die richtige Revision/Version zu helfen, zu leiten, die ihr Problem lösen – scicalculator

+0

Es ist erstaunlich, wie viele Dinge, die ich in der offiziellen Dokumentation Frühjahr verpassen.Konnte nicht herausfinden, warum meine Fallback-Methoden nicht für fehlerhafte URL-Routen aufgerufen wurden. +1 – Bal