Usiamo Eureka con le nostre applicazioni Spring Boot da alcuni mesi. Abbiamo abilitato la ricerca del servizio tra le applicazioni usando le annotazioni @DiscoveryClient
. Le registrazioni, i rinnovi dei contratti di locazione e le operazioni di cancellazione funzionano come previsto.Utilizzo di Eureka come registro utilizzando le API REST
Recentemente, abbiamo riscontrato uno scenario in cui abbiamo un componente di applicazione non Java (scritto in C++), che espone 3 endpoint del servizio REST che molte delle nostre applicazioni Java di Spring Boot utilizzerebbero. Stiamo provando a vedere se il componente C++ può utilizzare le API REST del server Eureka per registrarsi al suo interno, in modo che le applicazioni Java di Spring Boot possano eseguire la normale ricerca tramite Eureka per entrare in contatto con il componente C++.
Poiché non è possibile utilizzare il client Eureka nei componenti C++ (ovviamente), ho iniziato a testare le API REST dirette (come descritto here) utilizzando Postman. La registrazione ha funzionato senza problemi inviando un payload JSON utilizzando il metodo POST a http://eurekaserver:8761/eureka/apps/FOO-APP (con instanceId = 1111 e hostName = foo-app). Posso interrogare http://eurekaserver:8761/eureka/apps e posso vedere FOO-APP elencato lì come previsto.
Tuttavia, quando provo l'operazione di annullamento utilizzando il metodo DELETE su http://eurekaserver:8761/eureka/apps/FOO-APP/1111 o http://eurekaserver:8761/eureka/apps/FOO-APP/foo-app, viene visualizzato un errore 404.
Con instanceId:
{
"timestamp": 1447479397996,
"status": 404,
"error": "Not Found",
"message": "Not Found",
"path": "/eureka/apps/FOO-APP/1111"
}
OR (stesso risultato per hostName):
{
"timestamp": 1447479397996,
"status": 404,
"error": "Not Found",
"message": "Not Found",
"path": "/eureka/apps/FOO-APP/foo-app"
}
Ho provato diverse combinazioni, ma non sono in grado di fare questo lavoro. Ho la sensazione che mi manchi qualcosa di ovvio - potrebbe essere qualcosa di piccolo. Qualsiasi aiuto su questo sarebbe apprezzato.
PS: Eureka La documentazione dell'endpoint REST cita "v2" nell'URL. Tuttavia, ciò non funziona nel mio caso. La registrazione (che funziona per me) non utilizza "v2" come descritto sopra. Se qualcuno potesse convalidarlo, sarebbe altrettanto utile. Non sembra esserci abbastanza materiale su questo.
Hai mai pensato di utilizzare un sidecar? Si occupa della registrazione e funge anche da proxy inverso se l'applicazione C++ vuole connettersi ad altri servizi distribuiti. L'applicazione deve solo esporre il suo stato di salute nel formato predefinito. –
Questa è un'opzione. Ma sto cercando di ottenere questo risultato chiamando gli endpoint REST. le invocazioni di cURL dovrebbero funzionare secondo me. Ma loro non stanno succedendo. – Bloodysock
spring-cloud non include la v2. Probabilmente stai usando l'ID di istanza sbagliato. Quale versione di spring cloud stai usando? Imposta 'instanceId' da qualche parte nelle app? – spencergibb