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
sollten Sie erwägen eine Versionsnummer setzen die Benutzer auf die richtige Revision/Version zu helfen, zu leiten, die ihr Problem lösen – scicalculator
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