Angenommen, Sie haben zwei Serviceanrufe A und B als HystrixCommand
verpackt. Sie haben jetzt drei Optionen:
Verwenden Sie .execute()
: reiner synchroner Anruf. Sie rufen die Methode auf und setzen Ihr Programm fort, sobald das Ergebnis angekommen ist. Die Gesamtausführungszeit Ihres Programms ist die Summe beider Aufrufe. Der Hauptfluss Ihres Programms ist sehr linear.
Verwenden Sie .queue()
: erhalten Sie sofort eine Future
für beide Befehle. Beide Serviceaufrufe werden parallel ausgeführt. Verwenden Sie dann .get()
, um die Ergebnisse abzurufen. Diese Aufrufe mit Block bis das Ergebnis dort ist. Ihre gesamte Ausführungszeit ist schneller als zuvor: Ihre Ausführungszeit entspricht der Länge des längsten Serviceanrufs. Verwenden Sie dies, wenn Sie die Ergebnisse der beiden Dienste kombinieren möchten. Der Hauptfluss Ihres Programms ist immer noch linear, obwohl beide Aufrufe parallel ausgeführt werden.
Verwenden Sie .subscribe()
: erhalten Sie sofort eine Observable
für beide Befehle. Beide Serviceaufrufe werden parallel ausgeführt. Verwenden Sie dann .subscribe()
, um einen Rückruf zu registrieren, um auf das Ergebnis zu reagieren, sobald es verfügbar ist. Dies ist sehr nützlich, wenn Sie die Ergebnisse nicht kombinieren wollen und nach dem Eintreffen auf die Ergebnisse von Service A und B unabhängig reagieren möchten. Der Hauptfluss Ihres Programms ist nicht linear, sondern reaktiv: Der Fluss des Programms wird innerhalb des Callbacks für jeden Befehl fortgesetzt.
Ich hoffe es hilft.
Können Sie über die Eigenschaft maxQueueSize https://github.com/Netflix/Hystrix/wiki/Configuration#ThreadPool erklären. Mein Verständnis aus dem Dokument ist, wenn Sie diese Eigenschaft angeben, die Warteschlange, die verwendet wird, um vom aufrufenden Thread an einen der Threads im Hystrix-Thread-Pool zu übergeben, die Größe von maxQueueSize? Wenn ja, wenn ich diesen Wert groß genug gebe, sollte ich jemals RejectedExecutionException erhalten? – timpham