FRINGCLOUD -Mechanismus -Konfiguration
Erstens ist der Wiederholung hier kein Wiederholung, nachdem ein Fehler gemeldet wurde, sondern eine Wiederholung einer anderen Instanz, nachdem der Client des Lastausgleichs feststellt, dass die Remote -Request -Instanz nicht verfügbar ist.
@Bean@loadBalancedRestTemplate rastTemplate () {httpcomponentsClientHttpRequestFactory httprequestFactory = new httpcomponentsClientHttpRequestFactory (); httprequestFactory.setReadTimeout (5000); httprequestFactory.setConnectTimeout (5000); Neue RastTemplate zurückgeben (httprequestFactory);}Mechanismus wiederholen
Tenden Sie die Konfiguration durch die Wiederholung von Retyryer, die von sich selbst verpackt sind, und die Standardeinstellung beträgt das 5 -fache
Paket vorliegen; statische java.util.concurrent.timeUnit.seconds;/*** für jeden Aufruf zu {@link client#execute (Anfrage, Feign.Request.Options)} kloniert. * Implementierungen können den Zustand behalten, um festzustellen, ob der Wiederholungsvorgang fortgesetzt werden sollte oder nicht. * /public interface Retyryer erweitert klonbar { /*** Wenn das Wiederieren zulässig ist, kehren Sie zurück (möglicherweise nach dem Schlafengehen). Ansonsten die Ausnahme verbreiten. */ void continororPropagate (Wiederholungsabnahme E); Wiederholung Clone (); public static class Standard implementiert RETRYER {private endgültige int maxattemptes; private endgültige lange Zeit; privates Final Long Maxperiode; int Versuch; Langschlafenformillis; public default () {this (100, Seconds.tomillis (1), 5); } public Standard (langer Zeit, langer Maxperiode, int maxattemptes) {this.period = Periode; this.maxPeriod = maxperiod; this.maxattempts = maxattemptes; this.attempt = 1; }Tenden Sie vor Wiederholung ab
@BeanRetryer FeignRetryer () {return retyryer.never_retry;}Timeout -Einstellung anfordern
@BeanRequest.options Requestoptions (configurableDenvironment env) {int RibbonreadTimeout = env.getProperty ("Ribbon.ReadTimeout", int.Class, 6000); int ribbonConnectionTimeout = env.getProperty ("Ribbon.ConnectTimeout", int.Class, 3000); RECHTEN SIE NEUE ANFAHREN.OPTIONS (RIBBONCONNECTIONTimeOut, RibbonReadTimeout);};}Wiederholen Sie jeder Komponente in der Federwolke
In letzter Zeit haben mich viele Kinderschuhe gefragt, wie man die Frühlingswolke -XXX -Komponente so konfigurieren, dass sie es erneut ausprobieren. Dieser Artikel fasst es zusammen.
Der Wiederholungsmechanismus in der Federwolke ist ziemlich chaotisch. Verschiedene Versionen haben bestimmte Unterschiede und die Implementierung ist nicht sehr unterschiedlich. Glücklicherweise hat sich die Spring Cloud Camden danach im Grunde genommen stabilisiert, und in Dalston wurden einige Verbesserungen vorgenommen. Die Details sind noch nicht angegeben.
Lassen Sie es uns unten ausführlich besprechen.
Die Version, die ich verwendet, ist Spring Cloud Dalston SR4, die auch für Edgware und später für Edgware geeignet ist. Für Dalstons frühere Version wird dieser Artikel nicht diskutiert, Sie können ihn selbst studieren.
Wiederholung des Bandes+RestTemplate
Für die RESTTEMPLATE, die das Tibbon integriert, fügt eine RestTemplate die @loadBalanced Annotation hinzu:
@Bean@loadBalancedPublic rastTemplate rastTemplate () {simpleClientHttpRequestFactory SimpleClientHttpRequestFactory = new SimplyClientHttpRequestFactory (); SimpleClientHttpRequestFactory.setConnectTimeout (1000); SimpleClientHttpRequestFactory.SetReadTimeout (1000); Neue RestTemplate zurückgeben (simpleClientHttprequestFactory);}Auf dieser Grundlage kann das Wiederieren mit der folgenden Konfiguration erreicht werden:
Frühling: Cloud: LoadBalancer: Wiederholung: Aktiviert: Trueribbon: # Maximale Anzahl der Wiederholungen für dieselbe Instanz, ohne den ersten Anruf an MaxAutoretries: 1 # Maximale Anzahl von Wiederholungen für andere Instanzen, ohne die ersten ausgewählten Server -MaxAutoretriesNextServer: 2 # # Ob alle Operationen die Operationen auszusetzen, die Operationen ausgeschlossen sind.
Täuschung von Wiederholung
Täuschung selbst hat auch die Fähigkeit zu wiederholen. In der frühen Frühlingswolke verwendete Feign feign.Retryer.Default#Default() und versuchte es 5 Mal. Aber Feigd integriert das Band, und das Band hat auch die Möglichkeit zu wiederholen, was zu diesem Zeitpunkt zu Verhaltensverhalten führen kann.
Spring Cloud erkannte dieses Problem und verbesserte sich, um die Wiederholung von feign.Retryer#NEVER_RETRY zu ändern. Wenn Sie die Wiederholung von Feign verwenden müssen, verwenden Sie einfach die Wiederholungskonfiguration von Ribbon. Daher kann für Camden und spätere Versionen die Wiederholung von Feign unter Verwendung der folgenden Eigenschaften konfiguriert werden:
Ribbon: MaxAutoretries: 1 MaxAutoretriesnextServer: 2 OktoretryonAlaloperationen: Falsch
Verwandte Probleme finden Sie unter: https://github.com/spring-cloud/spring-cloud-netflix/issues/467
Zuuls Wiederholung
Konfiguration:
Zuul: # Aktivieren von Zuuls Wiederholungsablösbar: Trueribbon: MaxAutoretries: 1 MaxAutoretriesNextServer: 2 OktoretryonAlaloperationen: Falsch
Oben haben wir zuul.retryable=true verwendet, um die Wiederholung weltweit für Zuul zu aktivieren. In der Tat können wir auch die angegebene Route aktivieren/ausschalten:
Zuul.routes. <routName> .retryable = true
Die lokale Konfigurationspriorität ist höher.
Basierend auf dem HTTP -Antwortcode nachlassen
ClientName: Ribbon: Retyryablestatuscodes: 404.502
Notiz:
Die Zeitüberschreitung von Hystrix muss größer sein als die Zeitüberschreitungszeit. Andernfalls gibt es keine Möglichkeit, sich erneut zu versuchen.
Im Allgemeinen wird nicht empfohlen, ribbon.OkToRetryOnAllOperations auf true zu setzen. Denn sobald diese Konfiguration aktiviert ist, wird jeder Vorgang erneut abgeschlossen, einschließlich Postanfragen, und da das Anforderungsbehörde zwischengespeichert wird, können die Ressourcen des Servers zu diesem Zeitpunkt beeinträchtigt werden.
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.