Hystrix Ausführungsmuster

8

Ich versuche, meinen Kopf um Hystrix zu wickeln und nachdem ich ihre Dokumente gelesen habe habe eine Frage zu seinen Nutzungsmustern.

Zum einen verstehe ich den Anwendungsfall nicht für , wenn die asynchrone Ausführung im Gegensatz zu Reaktiv Ausführung. Der einzige Unterschied, den ich sehen kann, ist, dass die asynchrone Ausführung immer nicht blockierend ist, während Reaktive entweder blockieren oder nicht blockieren kann. Also ich denke meine wahre Frage ist:

  • Was ist der Unterschied zwischen synchroner und blockierender reaktiver Ausführung ?; und
  • Was ist der Unterschied zwischen der asynchronen und nicht blockierenden reaktiven Ausführung?
smeeb 21.11.2014, 16:30
quelle

1 Antwort

20

Nehmen wir an, Sie haben zwei Serviceaufrufe A und B als HystrixCommand umbrochen. Sie haben jetzt drei Optionen:

Verwenden Sie .execute() : reiner synchroner Aufruf. 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.

benutze .queue() : empfange sofort einen 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.

benutze .subscribe() : empfange sofort einen 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.

    
ahus1 23.11.2014, 17:29
quelle