2017-12-02 4 views
1

Ich spiele gerade mit Microservices herum und ich habe gerade angefangen Angular zu benutzen. Nun, ich frage mich, ob und wie es möglich ist, auf eine Service-Entdeckung (z. B. Konsul) innerhalb von Angular zuzugreifen? Durch den Zugriff auf meine ich:Handling Service Discovery in Angular

  • Register Winkel App als Dienst auf Registry (so dass es Host und Port Winkel App weiß auf läuft)

  • senden REST Aufruf an andere registrierte Service - in besten Fall nur Verwenden Sie den Namen des Dienstes.

Um auszudrücken, das ist ein bisschen genauer gesagt: Es gab einen Anwendungsfall, in dem ich zwei einfache Dienste mit Spring-Boot entwickelt, ich die Schritte von this Blog angewendet einen Dienst von dem anderen mit Consul zuzugreifen. So sieht mein REST-Aufruf am Ende so aus:

restTemplate.getForObject (http://city-service/rest/city/capital ', ...);

Was ich daran mag, ist, dass ich weg vom Host und den Portinformationen abstrahieren kann. Genau jetzt würde ich das Gleiche in Angular tun. Daher anstatt etwas wie folgt aus:

this.http.get('http://localhost:8080/rest/city/capital') 

Ich möchte etwas ähnliches wie diese haben:

this.http.get('http://city-service/rest/city/capital') 

Wie kann ich eine Service-Discovery-Zugang wie Consul (es muss nicht Consul sein , andere sind auch gut) in Angular? Wie gesagt, ich habe Angular gerade erst kennengelernt, also bitte entschuldigen Sie, dass das eine dumme Frage ist.

Ich weiß, dass einige Dienstentdeckungen (einschließlich Consul) eine REST-API bereitstellen, um Informationen zu den registrierten Diensten abzurufen. Allerdings müsste ich zuerst explizit eine REST-Anfrage an diese senden, bevor ich meine eigentlich gewünschte REST-Anfrage senden könnte. Ich würde es vorziehen, wenn es eine andere Option gäbe. Jede Hilfe wird geschätzt.

Ich habe eine allgemeinere Frage zu diesem before, aber ich konkretisiert jetzt die Frage hier.

Antwort

1

Consul und andere Service-Discovery-Systeme sind nicht für den Zugriff aus dem öffentlichen Web konzipiert und Ihre Frage ist nicht wirklich mit Angular verwandt.

Sie können einen Consul-aware-Lastverteiler wie https://github.com/fabiolb/fabio oder https://traefik.io/ verwenden, um den Datenverkehr zu Services zu leiten, die gemäß HOST und/oder PATH in Consul registriert sind.

+0

Das Problem ist nicht beschränkt auf Angular, das ist richtig. Ich habe jedoch darauf hingewiesen, dass ich Angular verwende, da es möglich ist, dass Angular eine einfach zu bedienende Möglichkeit bietet. Aber dann helfen mir diese Consul-bewussten Load Balancer nicht wirklich bei meinem Problem, da ich nicht im Voraus weiß, auf welchem ​​Rechner meine eckige (oder andere Framework) App läuft. Ist die einzige andere Alternative zu z.B. einen Spring Boot oder eine andere Art von Anwendung auf demselben Host bereitstellen, damit sich diese andere App bei Consul registrieren kann (so dass ich implizieren kann, dass sich die eckige App auf demselben Host befindet)? – MDDCoder25

+0

beziehen Sie sich auf die Angular-App auf der Clientseite oder einen Server, der .html/.js/.css bedient? –

+0

Es ist so: Ich möchte eine eckige App auf einer Cloud-Plattform wie OpenShift bereitstellen. Einige andere Anwendungen sollten sich auf diese eckige App beziehen, so dass ich den Host kennen muss, auf dem die App läuft.Zu diesem Zweck würde ich gerne eine Service-Entdeckung machen. Die Frage ist jedoch auch allgemeiner gemeint. Wenn ich weiß, dass einige Dienste dort registriert sind und ich sie nutzen möchte, sollte ich diesen Dienst anrufen können (der zweite Teil der Frage). – MDDCoder25

Verwandte Themen