Descubrimiento de servicios en la Nube de Spring con Netflix Eureka
Aprenda a crear microservicios, basados en Spring cloud, en el servidor de registro Eureka de Netflix y cómo otros microservicios (clientes de Eureka) lo utilizan para registrar y descubrir servicios para llamar a sus API.
Usaremos la API Spring Cloud basada en Spring Boot. Usaremos el servidor Eureka de Netflix para crear el servidor de registro de servicios y los clientes Eureka que se registrarán y descubrirán otros servicios para llamar a las API REST.
- Descripción general
- Pila de tecnología y tiempo de ejecución
- ¿Qué es el servidor y los clientes Eureka de Netflix?
- Eureka Service Registry Server
- Crear servidor Eureka
- Configuración del Servidor
- Pruebe el servidor Eureka
- Eureka Client – Student Service
- Crear Eureka Proyecto de Cliente
- Configuración del Cliente
- Agregar API REST
- Pruebe el cliente Eureka
- Cliente Eureka – Servicio Escolar
- Crear Eureka Proyecto de Cliente
- Configuración del Cliente
- Agregue una API REST que consuma la API REST de student service
- Demostración de Detección de servicios y llamadas
- Cosas para verificar si se enfrenta a algún error
- Resumen
Descripción general
Crearemos tres microservicios para este ejemplo de Eureka de Netflix.
- Servidor de registro de servicio Eureka: Este microservicio proporcionará el registro de servicio y el servidor de detección.
- Microservicio para estudiantes – Que proporcionará algunas funcionalidades basadas en la entidad del estudiante. Será un servicio basado en rest y, lo más importante, será un servicio al cliente de eureka, que hablará con eureka service para registrarse en el registro de servicios.
- Microservicio escolar: El mismo tipo que el servicio para estudiantes, la única característica añadida es que invocará el servicio para estudiantes con el mecanismo de búsqueda de servicio. No usaremos la URL absoluta del servicio para estudiantes para interactuar con ese servicio.
Aquí está el diagrama de interacción entre los tres servicios mencionados anteriormente.
Pila de tecnología y tiempo de ejecución
- Java 1.8
- Eclipse IDE
- Spring cloud
- Spring boot
- Spring Rest
- Maven
Table of ContentsWhat is Netflix Eureka Server and Clients?Eureka Service Registry ServerEureka Client - Student ServiceEureka Client - School ServiceDemo of Service Discovery and CallingThings to check if facing any errorSummary
¿Qué es el servidor y los clientes Eureka de Netflix?
Como sabemos en estos días, hay mucho impulso en torno a los microservicios. La transición de la arquitectura monolítica a la basada en microservicios ofrece muchos beneficios para el futuro en términos de mantenimiento, escalabilidad, alta disponibilidad, etc. Sin embargo, al mismo tiempo, también hay muchos desafíos al hacer esta migración. Una de ellas es mantener direcciones de microservicios individuales. Esta tarea puede ser enormemente compleja, dependiendo de la cantidad de servicios y su naturaleza dinámica. Si se distribuye toda la infraestructura y también hay alguna replicación, mantener estas direcciones de servicio se vuelve más difícil.
Para resolver esto, en la computación distribuida hay un concepto llamado ‘Registro y descubrimiento de servicios’ donde un servidor dedicado es responsable de mantener el registro de todos los Microservicios que se han implementado y eliminado. Esto actuará como una guía telefónica de todas las demás aplicaciones/microservicios.
Piense en ello como un servicio de búsqueda donde los microservicios (clientes) pueden registrarse y descubrir otros microservicios registrados. Cuando un microservicio de cliente se registra con Eureka, proporciona metadatos como host, puerto e indicador de estado, lo que permite que otros microservicios lo descubran. El servidor de detección espera un mensaje de latido regular de cada instancia de microservicio. Si una instancia comienza a fallar constantemente al enviar un latido, el servidor de detección eliminará la instancia de su registro. De esta manera tendremos un ecosistema muy estable de Microservicios que colaboran entre sí, y además no tendremos que mantener manualmente la dirección de otros Microservicios, lo que es una tarea casi imposible si el escalado hacia arriba/abajo es muy frecuente, bajo demanda y usamos host virtual para alojar los servicios especialmente en el entorno de la nube.
Eureka Service Registry Server
Siga estos pasos para crear y ejecutar Eureka server.
Crear servidor Eureka
Crear un proyecto de arranque de resorte desde el portal inicializador de arranque de resorte con dos dependencias, p. ej. Eureka server
y Actuator
. Da otras coordenadas de maven GAV y descarga el proyecto.
Descomprima e importe el proyecto en Eclipse como proyecto maven existente. En este paso, todas las dependencias necesarias se descargarán del repositorio maven.
Ahora abra SpringEurekaServerApplication
la clase que spring ya ha generado en el proyecto descargado y agregue la anotación @EnableEurekaServer
en la clase.
package com.example.howtodoinjava.springeurekaserver; import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer@SpringBootApplicationpublic class SpringEurekaServerApplication { public static void main(String args) { SpringApplication.run(SpringEurekaServerApplication.class, args); }}
Vuelva a construir el proyecto. Con esta anotación, este artefacto actuará como un registro de microservicios y un servidor de descubrimiento.
Configuración del Servidor
Crear un archivo llamado application.yml
en el src\main\resources
directorio. Agregar estas propiedades –
server: port: ${PORT:8761} # Indicate the default PORT where this service will be startedeureka: client: registerWithEureka: false#telling the server not to register himself in the service registry fetchRegistry: false server: waitTimeInMsWhenSyncEmpty: 0#wait time for subsequent sync
Crear otro archivo llamado bootstrap.yml
en el src\main\resources
directorio. Agregue estas propiedades –
spring: application: name: eureka cloud: config: uri: ${CONFIG_SERVER_URL:http://localhost:8888}
Pruebe el servidor Eureka
Inicie la aplicación como aplicación de arranque por resorte. Abra el navegador y vaya a , debería ver la página de inicio de eureka server que se ve a continuación.
Tenga en cuenta que en este punto no se registra ningún servicio aquí, lo que se espera y una vez que activemos los servicios del cliente, este servidor se actualizará automáticamente con los detalles de los servicios al cliente.
Eureka Client – Student Service
Siga estos pasos para crear y ejecutar Eureka client ejecutando student service.
Crear Eureka Proyecto de Cliente
Crear un Resorte de arranque del proyecto de inicializador portal con cuatro dependencias decir Actuator
Web
Rest Repositories
Eureka Discovery
. Da otras coordenadas de maven GAV y descarga el proyecto.
Descomprima e importe el proyecto en Eclipse como proyecto maven existente.
Ahora agregue la anotación @EnableEurekaClient
en la clase de aplicación de arranque por resorte presente en la carpeta src
. Con esta anotación, este artefacto actuará como un cliente de descubrimiento de primavera y se registrará en el servidor eureka adjunto a este servicio.
package com.example.howtodoinjava.springeurekaclientstudentservice; import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication@EnableEurekaClientpublic class SpringEurekaClientStudentServiceApplication { public static void main(String args) { SpringApplication.run(SpringEurekaClientStudentServiceApplication.class, args); }}
Configuración del Cliente
Crear un archivo llamado application.yml
en el src\main\resources
directorio y añadir a continuación de las líneas.
server: port: 8098#default port where the service will be startedeureka:#tells about the Eureka server details and its refresh time instance: leaseRenewalIntervalInSeconds: 1 leaseExpirationDurationInSeconds: 2 client: serviceUrl: defaultZone: http://127.0.0.1:8761/eureka/ healthcheck: enabled: true lease: duration: 5spring: application: name: student-service #current service name to be used by the eureka server management: security: enabled: false#disable the spring security on the management endpoints like /env, /refresh etc. logging: level: com.example.howtodoinjava: DEBUG
Agregar API REST
Ahora agregue un RestController
y exponga un punto final rest para obtener todos los detalles de los estudiantes de una escuela en particular. Aquí estamos exponiendo/getStudentDetailsForSchool/{schoolname}
endpoint para servir al propósito comercial. Para simplificar, codificamos los detalles de los estudiantes.
Student
la clase es un POJO simple.
Pruebe el cliente Eureka
Inicie este proyecto como aplicación de arranque por resorte. Ahora verifique que este servicio se haya registrado automáticamente en el servidor Eureka. Vaya a la consola de servicio Eureka y actualice la página. Ahora, si todo va bien, veremos una entrada para student-service en la consola de servicio eureka. Esto indica que tanto el servidor como el cliente de Eureka se conocen entre sí.
ahora vamos a comprobar que el /getStudentDetailsForSchool/{schoolname}
extremo está en marcha y funcionando. Vaya al navegador y vaya a , dará los detalles del estudiante para una escuela en particular
abcschool
.
Cliente Eureka – Servicio Escolar
Ahora crearemos el servicio escolar que se registrará en el servidor eureka – y descubrirá invocar student-service sin ruta de URL codificada.
Siga los pasos exactos para crear el servicio para estudiantes, para crear y ejecutar el cliente Eureka que también ejecuta el servicio escolar.
Crear Eureka Proyecto de Cliente
Crear un Resorte de arranque del proyecto de inicializador portal con cuatro dependencias decir Actuator
Web
Rest Repositories
Eureka Discovery
. Da otras coordenadas de maven GAV y descarga el proyecto.
Descomprima e importe el proyecto en Eclipse como proyecto maven existente.
Ahora agregue la anotación @EnableEurekaClient
en la clase de aplicación de arranque por resorte presente en la carpeta src
. Con esta anotación, este artefacto actuará como un cliente de descubrimiento de primavera y se registrará en el servidor eureka adjunto a este servicio.
package com.example.howtodoinjava.springeurekaclientschoolservice;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication@EnableEurekaClientpublic class SpringEurekaClientSchoolServiceApplication {public static void main(String args) {SpringApplication.run(SpringEurekaClientSchoolServiceApplication.class, args);}}
Configuración del Cliente
Crear un archivo llamado application.yml
en el src\main\resources
directorio y añadir a continuación de las líneas. Estas configuraciones son muy similares al servicio de estudiante, excepto el número de puerto y el nombre del servicio.
Agregue una API REST que consuma la API REST de student service
Ahora agregue un RestController
y exponga un punto final rest para obtener detalles de la escuela. Este extremo utilizará la URL de estilo de detección de servicios con el nombre de la aplicación, en lugar de la URL completa con host: port.
De esta manera podemos deshacernos de la configuración específica del servicio y podemos dar la responsabilidad de buscar el servicio al servidor eureka y a la plantilla rest que se proporciona aquí. También podemos aplicar equilibrio de carga (ver anotación @LoadBalanced
) aquí si las múltiples instancias se ejecutan para el mismo servicio.
La URL que hemos utilizado es . Claramente, estamos utilizando solo el nombre del servicio
student-service
en lugar de host:port
. Esto será manejado internamente por spring framework, eureka server y rest template juntos.
Demostración de Detección de servicios y llamadas
Ahora también inicie el servicio escolar. Los tres servicios han comenzado. Compruebe la consola del servidor eureka. Los servicios escolares y estudiantiles deben estar registrados allí.
Ir al navegador y vaya a http://localhost:9098//getSchoolDetails/abcschool, se dará a la escuela de detalles para una escuela en particular abcschool detalles. Hemos invocado el servicio estudiantil internamente. La respuesta se verá como en el navegador:
Cosas para verificar si se enfrenta a algún error
- Anotaciones
@EnableEurekaServer
y@EnableEurekaClient
son el corazón del ecosistema de aplicaciones. Sin esas dos cosas no funcionarán en absoluto. - Asegúrese de que, en el momento de iniciar el servicio cliente de configuración, el servicio servidor eureka ya se esté ejecutando, de lo contrario, podría llevar algún tiempo registrarse, lo que podría crear confusión durante las pruebas.
Resumen
Vimos la facilidad con la que se puede implementar el registro de servicios y el servidor de detección, así como los clientes de manera eficiente. Spring Framework está manteniendo muchas cosas internamente. Aquí solo estamos usando un par de anotaciones y una configuración muy mínima para lograr todo rápidamente.