Wir verwenden Eureka seit einigen Monaten mit unseren Spring Boot-Anwendungen. Wir haben Service-Lookup zwischen Anwendungen mit @DiscoveryClient
Annotationen aktiviert. Die Anmeldungen, Mietverlängerungen und Deregistrierungen funktionieren wie erwartet.Verwenden von Eureka als Registry mithilfe von REST-APIs
Vor kurzem haben wir ein Szenario entdeckt, in dem wir nicht-Java-Anwendungskomponenten (geschrieben in C++) haben, die 3 REST-Dienstendpunkte verfügbar machen, die viele unserer Spring Boot-Java-Anwendungen verwenden würden. Wir versuchen herauszufinden, ob die C++ - Komponente die REST-APIs des Eureka-Servers nutzen kann, um sich selbst zu registrieren, damit die Spring-Boot-Java-Anwendungen die übliche Suche über Eureka durchführen können, um mit der C++ - Komponente in Kontakt zu treten.
Da ich den Eureka Client nicht in den C++ - Komponenten verwenden kann (offensichtlich), begann ich direkte REST-APIs (wie beschrieben here) mit Postman zu testen. Die Registrierung funktionierte problemlos, indem eine JSON-Payload mit der POST-Methode an http://eurekaserver:8761/eureka/apps/FOO-APP gesendet wurde (mit instanceId = 1111 und hostName = foo-app). Ich kann http://eurekaserver:8761/eureka/apps abfragen und kann FOO-APP wie erwartet dort aufgeführt sehen.
Wenn ich jedoch versuchen, den Vorgang mit DELETE-Methode zu http://eurekaserver:8761/eureka/apps/FOO-APP/1111 oder http://eurekaserver:8761/eureka/apps/FOO-APP/foo-app abzubrechen, erhalte ich einen 404-Fehler.
Mit instanceId:
{
"timestamp": 1447479397996,
"status": 404,
"error": "Not Found",
"message": "Not Found",
"path": "/eureka/apps/FOO-APP/1111"
}
OR (gleiches Ergebnis für hostname):
{
"timestamp": 1447479397996,
"status": 404,
"error": "Not Found",
"message": "Not Found",
"path": "/eureka/apps/FOO-APP/foo-app"
}
Ich habe versucht, verschiedene Kombinationen, aber ich bin nicht in der Lage, diese Arbeit zu machen. Ich habe das Gefühl, dass mir etwas offensichtlich fehlt - vielleicht etwas Kleines. Jede Hilfe dazu wäre willkommen.
PS: Eureka REST-Endpunkt-Dokumentation erwähnt "v2" in der URL. In meinem Fall funktioniert das jedoch nicht. Registrierung (die für mich funktioniert) verwendet nicht "v2" wie oben beschrieben. Wenn jemand dies bestätigen könnte, wäre das auch hilfreich. Es scheint einfach nicht genug Material dazu zu geben.
Haben Sie in Betracht gezogen, stattdessen einen Beiwagen zu verwenden? Es behandelt die Registrierung und fungiert auch als Reverse-Proxy, wenn Ihre C++ - Anwendung eine Verbindung zu anderen bereitgestellten Diensten herstellen möchte. Ihre Anwendung muss nur ihren Status im vordefinierten Format offenlegen. –
Das ist eine Option. Aber ich versuche das zu erreichen, indem ich gerade REST-Endpunkte anrufe. cURL-Aufrufe sollten meiner Meinung nach funktionieren. Aber das passiert nicht. – Bloodysock
Feder-Cloud enthielt nicht die v2. Sie verwenden wahrscheinlich die falsche instanceId. Welche Version der Federwolke verwendest du? Setzen Sie 'instanceId 'irgendwo in den Apps? – spencergibb