Este nuevo joetip es para aquellos que tienen en su arquitectura algunos micro servicios desarrollados con spring boot y ya estan usando algunos proyectos de Spring Cloud como Spring Cloud Config y Spring Cloud Eureka como Discovery server.
El Spring Boot Admin es un proyecto desarrollado por CodeCentric el cual esta disponible de forma gratuita en https://github.com/codecentric/spring-boot-admin para que podamos monitorear nuestros micro servicios.
Para que dichos micro servicios puedan ser monitoreados tenemos 2 opciones:
- Colocando la dependencia de spring boot admin client en cada proyecto
- O configurando el Eureka (Consul o Zookeeper) para que a partir de este se pueda monitorear a los micro servicios que ya están registrados en el.
Voy a explicar paso a paso lo que se tiene que hacer para trabajar con el spring boot admin en nuestro cluster de micro servicios. Pero, si eres impaciente y ya quieres probarlo, aquí te dejo el repositorio de github: https://github.com/joedayz/spring-boot-admin-cloud-finchley.
Para mis demos usare los siguientes proyectos y las siguientes versiones:
- Spring Boot 2.0.1.RELEASE
- Spring Cloud Finchley.RC1
- Spring Boot Admin 2.0.2
Spring Cloud Config
En una arquitectura de micro servicios es muy común que la configuración este descentralizada de ellos mismos. Es decir, en lugar de tener la configuración a BD, SMTP, JPA, Seguridad en tu micro servicio junto con el código fuente o en otras palabras en el mismo JAR, esta se encuentra en un repositorio GIT externo de donde tus micro servicios la deben obtener al iniciar (startup) para que puedan ejecutarse sin problemas.
En resumen:
El Spring Cloud Config es un proyecto de Spring Cloud que cumple esa función de brindar la configuración a los micro servicios vía http.
Crear un Spring Config Server
Para crear un servidor de configuración crearemos un proyecto spring boot desde cero con https://start.spring.io/ con las siguientes dependencias.
Con dicho setup tendremos lo necesario para iniciar un servidor Spring Cloud Config. El siguiente paso es configurar las versiones de spring boot y spring cloud que describí al iniciar el articulo.
El código completo lo puedes ver en el pom.xml del config-server.
Luego en la clase Appliation habilitamos el rol de servidor de configuración con la anotación @EnableConfigServer.
Finalmente, pasamos a configurar el acceso al repositorio GIT desde el cual obtendremos los parámetros. La ruta del application.yml que estará disponible para mis micro servicios estará en este link https://github.com/joedayz/spring-boot-admin-cloud-finchley/blob/master/ConfigData/application.yml.
Veamos la configuración:
Ejecutamos el proyecto y vemos si expone la data en formato json para cualquier micro servicio que lo solicite.
http://localhost:8001/application/default
La salida es la siguiente:
Si has llegado a este punto, felicitaciones, ya sabes como crear un Spring Cloud Config Server.
Spring Cloud Eureka
En una arquitectura de micro servicios con Spring Cloud tenemos el Servidor de Descubrimiento de Servicios (Discovery Server) quien tiene el registro de todos los micro servicios de tu arquitectura. El es que el sabe en que servidor, puerto, número de instancias del mismo, estado actual (UP o DOWN) se encuentra el micro servicio. Existen varios en el mercado, pero, nosotros vamos a usar el Eureka.
Los micro servicios en general se registran a si mismos en el Eureka. De eso hablaremos mas adelante.
Para convertir a este proyecto en un servidor Eureka usamos esta anotación @EnableEurekaServer.
Luego, vamos a configurar al servidor con autenticación básica para que puedan entrar a él usando como usuario: eureka y password: password.
Finalmente para que esto funcione configuramos el application.yml de la siguiente manera:
El archivo lo pueden ver en este link.
Ejecutamos el proyecto y luego vamos a http://localhost:8010, luego de ingresar el usuario (eureka) y clave (password) obtendremos este resultado.
NOTA: Aquí se verán los micro servicios registrados. Ojo la recomendación es tener varios Eureka para tener alta disponibilidad, ya que de caerse el eureka, se vuelve inconsistente tu arquitectura. En este artículo por motivos didácticos solo estamos corriendo un único eureka.
Si llegaste a este punto, felicitaciones, ya sabes crear y ejecutar un Spring Cloud Eureka, el Discovery Server de tu arquitectura.
Los micro servicios en general se registran a si mismos en el Eureka. De eso hablaremos mas adelante.
Crear un Spring Cloud Eureka
Para crear un servidor Eureka usaremos https://start.spring.io/ para crear un proyecto Spring Boot con la siguiente configuración:
Con dicho setup tendremos lo necesario para iniciar un servidor Spring Cloud Eureka. El siguiente paso es configurar las versiones de spring boot y spring cloud que describí al iniciar el articulo.
El código completo lo puedes ver en el pom.xml del config-server.
Con dicho setup tendremos lo necesario para iniciar un servidor Spring Cloud Eureka. El siguiente paso es configurar las versiones de spring boot y spring cloud que describí al iniciar el articulo.
El código completo lo puedes ver en el pom.xml del config-server.
Para convertir a este proyecto en un servidor Eureka usamos esta anotación @EnableEurekaServer.
Luego, vamos a configurar al servidor con autenticación básica para que puedan entrar a él usando como usuario: eureka y password: password.
Finalmente para que esto funcione configuramos el application.yml de la siguiente manera:
El archivo lo pueden ver en este link.
Ejecutamos el proyecto y luego vamos a http://localhost:8010, luego de ingresar el usuario (eureka) y clave (password) obtendremos este resultado.
NOTA: Aquí se verán los micro servicios registrados. Ojo la recomendación es tener varios Eureka para tener alta disponibilidad, ya que de caerse el eureka, se vuelve inconsistente tu arquitectura. En este artículo por motivos didácticos solo estamos corriendo un único eureka.
Si llegaste a este punto, felicitaciones, ya sabes crear y ejecutar un Spring Cloud Eureka, el Discovery Server de tu arquitectura.
Ejemplo con arquitectura de Micro Servicios
Una arquitectura de micro servicios usa en general como fachada o entrada a tu cluster de micro servicios un gateway. Y es, por medio del gateway que accedemos a los micro servicios.
Por motivos didacticos, nosotros haremos una solución simple. El gateway mostrará una oración que es el resultado de invocar a micro servicios subject + verb + article + adjective + noun.
El resultado debe ser algo así:
Explicado el ejemplo de @kennyk65 que al final vamos a monitorear con Spring Boot Admin, pasamos a explicar como crear los micro servicios y el gateway, los cuales usaran el spring cloud config para obtener sus configuraciones e iniciar correctamente, así como también, registrarse ellos mismos en el Eureka (más adelante veremos porque esto es importante).
Por motivos didacticos, nosotros haremos una solución simple. El gateway mostrará una oración que es el resultado de invocar a micro servicios subject + verb + article + adjective + noun.
El resultado debe ser algo así:
Explicado el ejemplo de @kennyk65 que al final vamos a monitorear con Spring Boot Admin, pasamos a explicar como crear los micro servicios y el gateway, los cuales usaran el spring cloud config para obtener sus configuraciones e iniciar correctamente, así como también, registrarse ellos mismos en el Eureka (más adelante veremos porque esto es importante).
Micro Servicio
Requisitos: Antes de crear y ejecutar los micro servicios, asegurate de tener el Spring Cloud Config y Eureka ejecutandose.
Para crear los micro servicios: subject (nos devolverá sujetos), verb (nos devolverá verbos), article (nos devolverá articulos), adjective (nos devolverá adjetivos) y noun (nos devolverá sustantivos) usamos la pagina https://start.spring.io/ con las siguientes dependencias:
Modificamos el archivo pom.xml con las versiones de spring boot y spring cloud que describimos al inicio del articulo.
De ahí configuramos el proyecto Spring Boot para que se registre en el Discovery Server Eureka con la anotación @EnableDiscoveryClient.
La Clase para modelar cada palabra es de la siguiente manera:
package demo;
/**
* 'Word' object is nicely represented in JSON over a regular String.
*/
public class Word {
public String word;
public Word() {
super();
}
public Word(String word) {
this();
this.word = word;
}
public String getWord() {
return word;
}
public void setWord(String word) {
this.word = word;
}
}
El Micro servicio al ser invocado vía REST devolverá una palabra según sea el profile activo (subject , verb, article, adjective, noun). Para ello tendrá que obtener una serie de palabras o alternativas que se asignarán al String words desde el Spring Cloud Config con @Value("${words}").
Pero, como se logra todo eso, pues, con la configuración que encontraremos en application.yml y bootstrap.yml del proyecto.
application.yml
Es necesario tener la referencia a words así no sea la fuente real, sino, la aplicación fallará. Recordemos que será el spring cloud config el que nos dará la lista real de words según el profile que este activo.
bootstrap.yml
Esta es la configuración clave, la que nos permitirá trabajar con el Spring Cloud Config (el URI) para obtener las palabras, con que service ID se registrará en Eureka y el nombre del micro servicio y profiles disponibles con el cual podemos ejecutarlo.
Si observamos ahí se configura lo descrito anteriormente.
Para poder ejecutar los micro servicios con distintos profiles. Se tiene el siguiente shell para correr el micro servicio como subject, verb, article, adjective y noun.
Si revisamos el Eureka veremos todos los micro servicios levantados.
Si llegaste a este punto ya tiene 5 micro servicios ejecutandose y obtieniendo su configuración del Spring Cloud Config y registrados en el Eureka. Felicitaciones.
Gateway
Requisito para esta parte: Los micro servicios words en sus diferentes perfiles deben estar ejecutandose.
No es buena práctica permitir que el mundo exterior acceda a tus micro servicios directamente, no hay excepciones, aún así sean APIs que van a exponer datos hacia afuera de tu sistema. Para ello la buena práctica es tener un Gateway. Para tener uno existe un proyecto denominado Spring Cloud Zuul el cual usaremos en esta demo que hace router y filter.
Para crearlo igualmente vamos a https://start.spring.io/ y creamos un proyecto Spring Boot con esta dependencia.
El pom.xml luego de hacer los cambios de versión queda así.
Convertimos este proyecto con Spring Boot en Gateway con la anotación @EnableZuulProxy.
En el proyecto iremos a una vista donde llamaremos a los micro servicios. Para ello basta un simple @Controller.
En la vista sentence.html con thymeleaf usaremos jquery para hacer las llamadas a los servicios de esta manera:
Y con Jquery llamar al servicio y colocar el resultado en el respectivo span.
Para que todo esto funcione, la magia nuevamente esta en el application.yml donde indicamos si deseamos permitir a thymeleaf hacer cache o no, así como el prefijo a utilizar cuando queramos llamar los microservicios /services/web por ejemplo.
y en el bootstrap.yml colocamos el nombre del micro servicio gateway y su asociación con el Spring Cloud Config.
Levantamos el Gateway y el resultado debe ser:
Si llegaste a este punto felicitaciones, ya sabes crear un gateway.
Para crearlo igualmente vamos a https://start.spring.io/ y creamos un proyecto Spring Boot con esta dependencia.
El pom.xml luego de hacer los cambios de versión queda así.
Convertimos este proyecto con Spring Boot en Gateway con la anotación @EnableZuulProxy.
En el proyecto iremos a una vista donde llamaremos a los micro servicios. Para ello basta un simple @Controller.
En la vista sentence.html con thymeleaf usaremos jquery para hacer las llamadas a los servicios de esta manera:
Y con Jquery llamar al servicio y colocar el resultado en el respectivo span.
Para que todo esto funcione, la magia nuevamente esta en el application.yml donde indicamos si deseamos permitir a thymeleaf hacer cache o no, así como el prefijo a utilizar cuando queramos llamar los microservicios /services/web por ejemplo.
y en el bootstrap.yml colocamos el nombre del micro servicio gateway y su asociación con el Spring Cloud Config.
Levantamos el Gateway y el resultado debe ser:
(Como puedes ver ya se esta llamando a los micro servicios)
Spring Boot Admin
Y llego el momento. En este punto dirás, y ¿a que hora a lo que vine?, mi plata.
Luego de acomodar las versiones y dependencias el pom.xml queda como en secciones anteriores.
De la misma manera para convertir este proyecto spring boot en spring boot admin usamos la anotación @EnableAdminServer.
Para brindarle algo de seguridad (autenticación HTTP básica) usaremos las credenciales: admin como usuario y clave password.
Finalmente en el application.yml hacemos la magia: Puerto donde se ejecutará, nombre de la aplicación, la seguridad http básica y su conexión con el Eureka.
Pasamos a ejecutar el proyecto.
(Login)
(Lista de Micro servicios)
(Panel de micro servicios)
(toda la información de tu micro servicio)
Nos vemos luego con la versión en ingles.
Enjoy!
Joe
0 comentarios:
Publicar un comentario