Hystrix-Konfiguration für Leistungsschalter in Java
Bin ich eine Anwendung schreiben, und ich möchte zu implementieren circuit breaker Muster. Dies ist die Hystrix Command-Klasse, die ich geschrieben habe:
public class HystrixCommandNextGen extends HystrixCommand<ScriptContext> {
private ScriptContext scriptctx;
private ScriptFactory scriptFactory;
private ScriptContext responseContext = null;
private Logger logger = LoggerFactory.getLogger(HystrixCommandNextGen.class);
public HystrixCommandNextGen(ScriptContext scriptctx, ScriptFactory scriptFactory) {
super(
Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("Thread_Pool"))
.andCommandKey(HystrixCommandKey.Factory.asKey(scriptctx.getExecutionData(ExecutionParam.SCRIPTNAME)))
);
this.scriptctx = scriptctx;
this.scriptFactory = scriptFactory;
HystrixCommandProperties.Setter().withCircuitBreakerEnabled(true);
HystrixCommandProperties.Setter().withCircuitBreakerRequestVolumeThreshold(150);
}
@Override
protected ScriptContext run() throws Exception {
scriptFactory.execute(scriptctx);
return scriptctx;
}
@Override
protected ScriptContext getFallback() {
logger.error("FI is not responding: Error occurred in the execution of " + getClass().getSimpleName());
return scriptctx;
}
}
Ich bin nicht in der Lage zu verstehen, wie zu konfigurieren, die Anzahl der threads, Schwellenwert Zeit für die Leistungsschalter und die Anzahl der Zugriffe zu handhaben.
Es sei denn, ich missverstanden den code von Hystrix, diese beiden Anrufe, die Sie haben, um
HystrixCommandProperties.Setter()
sind nicht etwas zu tun, als nur das erstellen eines neuen Objekts des Typs Setter, und nicht tatsächlich die Einrichtung eine Globale Eigenschaft
InformationsquelleAutor Sumit Kumar | 2015-04-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hystrix verwendet Archaius für configuration management. Die Archaius Bibliothek ermöglicht dynamische nachladen von Eigenschaft-Werte zur Laufzeit. Dokumentation zum konfigurieren Archaius ist hier: https://github.com/Netflix/archaius/wiki/Users-Guide
Wenn Sie konfigurieren möchten Hystrix im code, die Sie verwenden können, die Archaius ConfigurationManager-Klasse wie folgt aus:
Beachten Sie, dass die HystrixCommandKey Teil der Eigenschaft name string ist eigentlich der name des Leistungsschalters, die du mit dem .andCommandKey () - Methode der Setter. Also, wenn Sie die Befehl-Taste gedrückt zu werden, "MyCommand", der property-Schlüssel für timeout wäre eigentlich
"hystrix.command.MyCommand.execution.isolation.thread.timeoutInMilliseconds"
InformationsquelleAutor harperska
Die vollständige Liste der Konfigurationen und die Mittel stehen hier zur Verfügung:
https://github.com/Netflix/Hystrix/wiki/Configuration
Für Ihre konkreten Fragen:
konfigurieren Sie die keine. threads
verwenden Sie 'hystrix.threadpool.HystrixThreadPoolKey.coreSize'
Schwellenwert Zeit für Leistungsschalter
verwenden Sie 'hystrix.Befehl.HystrixCommandKey.Ausführung.isolation.thread.timeoutInMilliseconds'
Das ist ein wenig kompliziert. Aber die max. Anzahl der gleichzeitigen threads ist das gleiche wie keine. Anfragen zu behandeln.
Wäre es besser zu Lesen, durch die Konfiguration der wiki zu verstehen, die Struktur und die Verwendung der einzelnen-Eigenschaft, bevor Sie versuchen, setup.
InformationsquelleAutor Senthilkumar Gopal
Ist es am besten, um den set-Befehl Eigenschaften vor dem erstellen der Befehl. Hystrix Dokumentation konkret heißt dies für einige den Befehl Eigenschaften. Zum Beispiel:
Metriken.rollingStats.numBuckets:
Ab 1.4.12, diese Eigenschaft wirkt sich auf die ursprünglichen Metriken-Erstellung, und nur Anpassungen vorgenommen, um diese Eigenschaft nach dem Start nicht wirksam werden.
In anderen Worten, nicht initialisieren dieser Befehl Eigentum vom Konstruktor als zu spät. Ich bin mit 1.4.3 und zumindest für diese version, ich fand das zu halten, für alle Rollen-Messwerte und Leistungsschalter Eigenschaften. Ich habe verwendet, ConfigurationManager, um diese Eigenschaften festzulegen, bevor die Initialisierung der Befehl:
Ersetzen mit dem Befehl-Taste gedrückt (was in der Frage gefragt wird: "Thread_Pool").
InformationsquelleAutor Aamir Quraishi