2017-05-02 6 views
1

Ich habe eine einfache Zuul App, die eine einzige Route in der application.yml zu meinem Microservice Route hat. Es funktioniert.Zuul Proxy, der Routen dynamisch entdeckt

Was ich jedoch suche, ist eine dynamischere Lösung, bei der ich Routen dynamisch durch Code oder POST zu einigen Zuul-Endpunkten während eines Builds verdrahte (möglicherweise mithilfe von Springfox und einer Swagger-Definition von Microservices)). Ich konnte keine API für Zuul finden.

Ich bin etwas bewusst von Eureka und das scheint wie eine Lösung, um das Routing durch Entdeckung zu abstrahieren. Ich bin jedoch gespannt, ob es eine Lösung ohne Einführung von Eureka gibt. Wenn es eine Möglichkeit gibt, diese Routen in Zuul während eines Builds zu verkabeln, anstatt die application.yml jedes Mal bearbeiten zu müssen.

Vielen Dank im Voraus.

Antwort

1

Wenn Sie für Eureka gehen, wird dies tatsächlich funktionieren ootb. Zuul, wie in der Spring Cloud verpackt, stellt automatisch jeden Dienst mit seinem Namen zur Verfügung. Wenn Sie in Eureka einen Service mit der Bezeichnung users registrieren, erstellt Zuul automatisch eine Route /users, die standardmäßig an die Instanzen weitergeleitet wird. Das erlaubt nur einfache URL-Strukturen, sollte aber dein Problem lösen.

Bitte beachten Sie die official documentation für Details:

Vereinbarungs ein Dienst mit der ID „Benutzer“, Anfragen vom Proxy an/Benutzer gespeichert erhalten (mit dem Präfix gestrippt). Der Proxy verwendet Ribbon eine Instanz zu lokalisieren, um über Entdeckung zu übermitteln, und alle Anfragen werden in einem hystrix Befehl ausgeführt, ...

+0

Danke für die Antwort. Ich habe diesen Artikel gefunden, der über die Grundlagen von Eureka geht und einige Kunden registriert: https://dzone.com/articles/spring-cloud-netflix-how-works-service-registratio Um die Gateway-App (Zuul) registrieren zu lassen Ich denke, ich vermisse das Stück, das die Zuul-App von Eureka "bewusst" macht. Geht es nur um einen Eintrag in der application.yml Datei für die Zuul App? Ich werde weiterhin selbst forschen. Danke. – Mike

+0

@Mike aktualisiert meine Antwort mit einem Link zu der Feder Cloud-Dokumentation. –

0

Ich bin die Bearbeitung tatsächlich eine Blog-Post über genau dieses Thema (Routing und Filterung mit Spring Cloud Zuul Server), aber der Quellcode ist verfügbar und funktioniert seit einiger Zeit. Fühlen Sie sich frei, um es als Referenz zu verwenden:

Sehen Sie sich die aktualisierbaren Profileinstellungen Spring an. Diese Zuul Einrichtung funktioniert sowohl mit fest codierten Routen als auch mit Hilfe von Eureka.

Es fungiert auch als ein Spring Cloud Config-Client, so dass Routen dynamisch über Git aktualisiert werden können, die auch in einem anderen Blogpost behandelt wird: Refreshable Configuration using Spring Cloud Config Server, Spring Cloud Bus, RabbitMQ and Git.

+0

Danke. Ich werde auf jeden Fall einen Blick darauf werfen. Eine Sache, mit der ich im Moment zu kämpfen habe, ist die Tatsache, dass ich oauth auf dem zuul Proxy aktiviert habe: 'oauth2: Ressource: userInfoUri: https:/...../ userinfo' Dies funktioniert dadurch, dass es ein gültiges Oauth-Token für alle nachgeschalteten Dienste benötigt, die über Zuul Proxy-Server sind. Allerdings ist der/health-Endpunkt von zuul Server selbst gesichert, so dass ich denke, dass mein Eureka Probleme hat, es zu registrieren. Der Kunde wird Zuul mit dem Token anrufen. Wie kann ich Zulul erlauben, bei Eureka registriert zu werden, wenn der Proxy einen Token für einen Anruf benötigt? – Mike

+0

Erwägt Sie nicht Zuul mit Eureka registrieren und es als Balancer/Proxy auf die Dienste Einspeisepunkt/Last aussetzen? – ootero

+0

Ja. Ich versuche, Zuul als den Proxy zu verwenden, und ein Oauth-Check ist dort aktiviert (und es funktioniert). Doch was ich will, ist für Zuul dynamisch alle mit Eureka (das heißt ohne jeden ‚Weg‘ in der Zuul App application.yml Angabe) registrierten Dienste zu finden. Um das zu tun, muss ich Zuul wie bei Eureka auch als DiscoveryClient registrieren. Wenn ich das tue, scheitert der/Gesundheitscheck, wenn er Zuul schlägt, da es ein Token erfordert. Wahrscheinlich einfachste Lösung wäre für Zuul App zu ermöglichen,/Gesundheit,/info Endpunkte ohne ein Token getroffen werden - wenn es eine Möglichkeit gibt, das zu konfigurieren. Vielen Dank. – Mike

Verwandte Themen