Articles

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

Crearemos tres microservicios para este ejemplo de Eureka de Netflix.

  1. Servidor de registro de servicio Eureka: Este microservicio proporcionará el registro de servicio y el servidor de detección.
  2. 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.
  3. 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.

Interacción de componentes entre sí

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.

Generación de proyectos de servicio de servidor Eureka

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 @EnableEurekaServeren 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.

Consola Eureka Sin ningún Cliente

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 ActuatorWebRest RepositoriesEureka Discovery. Da otras coordenadas de maven GAV y descarga el proyecto.

Generación de proyectos de cliente –
Microservicio de estudiante

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í.

Eureka consola con el servicio de Estudiantes registrados

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.

Respuesta del servicio del estudiante

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 ActuatorWebRest RepositoriesEureka 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í.

Eureka consola con ambos servicios registrados

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:

Respuesta del servicio escolar

Cosas para verificar si se enfrenta a algún error

  1. Anotaciones @EnableEurekaServer y @EnableEurekaClient son el corazón del ecosistema de aplicaciones. Sin esas dos cosas no funcionarán en absoluto.
  2. 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.