2017-11-29 2 views
1

Ich habe die Hystrix fallback() - Methode in meinem Dienst A aktiviert. Wenn also ein abhängiger Dienst B inaktiv ist, wird die Fallback-Methode aufgerufen und die von mir bereitgestellte statische Nachricht angezeigt.Hat die Hystrix die Möglichkeit, ausstehende Anfragen in der Warteschlange wiederherzustellen?

Während dies zu tun ist ich auch den ausgefallenen Wunsch auf eine mq (Kaninchen mq) Senden

Nun, wie kann ich die anhängige oder Warteanforderung in der Warteschlange abrufen und es erneut zu verarbeiten, wenn die abhängigen Service B nach oben ist?

+0

@ ahus1 Ich habe gesehen, dass Sie praktische Erfahrung mit Hystrix haben, können Sie mir bitte dabei helfen? – maniker

+0

Eine Vermutung zu Ihrem Fragetitel: Meinten Sie "Hat die Hystrix die Möglichkeit, die ausstehenden Anfragen in der Warteschlange wiederherzustellen?" – leanne

+0

Ja :-) Ich bin in der Lage, die Schaltung zu öffnen und die fehlgeschlagenen Anfragen an die Warteschlange zu senden, aber wird die Schaltung geschlossen und die ausstehenden Anfragen vorverarbeiten, sobald der Dienst läuft? – maniker

Antwort

0

Ohne einen vollständigen Überblick über Ihre Architektur (was hier nicht möglich wäre) ist es schwierig, genau zu wissen, was Sie erreichen möchten. Aber auf den ersten Blick scheint es, als würdest du zu viel von Hystrix erwarten. Sobald der Fallback abgeschlossen ist, ist es abgeschlossen.

Wenn Sie eine Nachricht an eine Warteschlange gesendet haben, muss diese Nachricht von irgendwoher konsumiert werden. Sie möchten, dass die Nachricht nur konsumiert wird, wenn Service B ausgeführt wird. Logischerweise ist die einzige Option, dass Service B von dieser Warteschlange für fehlgeschlagene Anforderungen konsumiert. Vermutlich müsste Service B beim Verbrauch dieser Nachricht die Anfrage auf Service A wiederholen.

Ich nehme an, Sie könnten einen Watchdog-Dienst haben, der nach Erhalt einer Nachricht aus der Warteschlange fehlgeschlagener Anfragen beginnt, den Status zu überprüfen von Service B und einmal ist es "grün" wiederholt die Anfrage auf Service A.

Es klingt alles sehr verwirrt zu mir, würde ich vorschlagen, ein Umdenken.

Ich vermute, diese statische Nachricht ist etwas wie "Entschuldigung, wir konnten Ihre Anfrage jetzt nicht abschließen, aber wir werden für Sie im Hintergrund versuchen".

Von dem ich denke, es wäre besser, wenn Sie Service B in erster Linie rein nachrichtengesteuert gemacht hätten. Holen Sie Service A, um eine Nachricht direkt an Service B zu senden. Dann müssen Sie sich keine Sorgen machen, dass der Service heruntergefahren oder überlastet ist oder was auch immer.

+0

Ok, wenn nicht die Architektur, lassen Sie mich Ihnen erklären, was ich tue, habe ich zwei Dienste, die man ist Entity Service (verb basierter Service B) und der andere ist der Rufdienst (Noun base service A), also hier mache ich ein Rest Anruf von meinem Service A zu Service B (Entity Service). Entity Service wird nur die Anfrage von Service A und eine Transaktion von DB und senden Sie es an Service A und zeigen Sie die Nachricht oder Daten etc., So jetzt, wenn mein Service B down iam ist in der Lage, die Schaltung zu öffnen und senden Sie die Nachricht sagen "Ressource URI ist down und wird in Kürze" zu mq, werde ich in der Lage, es erneut zu verarbeiten, sobald B ist – maniker

+0

Nun, Sie haben wirklich nur Ihre Frage dort neu formuliert. Soweit ich weiß, hat Hystrix nicht die Funktion, die Sie suchen, und es würde sowieso die Dinge zu kompliziert machen. Ich wiederhole, dass, wenn Sie unzuverlässige Mengen an Verfügbarkeit auf Ihrem Service B erwarten, machen Sie es stattdessen zu einem Message Driven Service. Bei Erfolg kann B A benachrichtigen und Sie können Ihre Benutzeroberfläche oder was auch immer dynamisch aktualisieren. –

Verwandte Themen