Skip to content

Latest commit

 

History

History
62 lines (54 loc) · 3.34 KB

File metadata and controls

62 lines (54 loc) · 3.34 KB

#paso 6 : comunicando microservicios ##un bus para comunicarles a todos la configuración centralizada en archaius está muy bien peeeero implementar su actualización en caliente es compleja. también hay otros escenarios de negocio donde es necesario comunicar eventos a todos los servicios o a ciertos grupos, por ejemplo: activación/desactivación de una campaña comercial, cambio en la modalidad de funcionamiento de la aplicación (normal, contingencia, sólo lectura, etc) y cualquier otro cambio de estado del conjunto de microservicios.

spring cloud bus es la implementación que spring propone para comunicar los servicios y la tecnología/protocolo por defecto es amqp. el protocolo amqp tiene como implementación de referencia a RabbitMQ.

##instalando rabbitmq RabbitMQ es un servidor de colas muy eficiente y ágil que incluye una consola de administración muy potente.

para instalarlo debemos seguir las instrucciones para cada plataforma como se indican en https://www.rabbitmq.com/download.html pero en macosx es tan simple como:

$ brew update
$ brew install rabbitmq

el instalador crea los scripts en /usr/local/sbin pero no los incluye automáticamente en el path del .bash_profile o .profile así que nos tocará editarlo manualmente y añadir:

PATH=$PATH:/usr/local/sbin 

luego podremos iniciar RabbitMQ desde línea de comando simplemente haciendo:

rabbitmq-server

si abrimos un navegador en http://localhost:15672/ veremos la página de login de la consola donde podremos acceder utilizando guest como usuario y password.

ya está... y nada más... es uno de los servidores de colas más simples de instalar.

##actualizar los microservicios para implementar el bus debemos incluir en el servidor de configuraciones y en los microservicios la siguiente dependencia:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

y al arrancar se conectarán por defecto al servidor rabbitmq en la url por defecto http://localhost:5672. Si se quiere cambiar por que se esté en cloud se puede añadir al application.yml un bloque del estilo:

spring:
  rabbitmq:
    host: rabbitmqhost
    port: 5672
    username: guest
    password: guest

Al arrancar van a crear una cola “no durable” en el servidor rabbitmq para mandar los mensajes en esta sesión.

En nuestro caso, al arrancar nos ha dejado la traza:

[cTaskExecutor-8] o.s.amqp.rabbit.core.RabbitAdmin         : Auto-declaring a non-durable Queue (891a9a17-5964-4bf1-8bc4-c93e2d045db9). It will be redeclared if the broker stops and is restarted while the connection factory is alive, but all messages will be lost.

y si vamos a la consola de nuestro servidor de rabbitmq podemos ver la cola recién creada.

##enviar mensajes

Cada aplicación creará su propia cola, la cual se enganchará al “exchange” spring-cloud-bus, de tal manera que cada mensaje que se envíe mediante /bus/env -d :

$ curl -X POST http://localhost:8888/bus/env -d nombre=Antoniucci
$ curl -X POST http://localhost:8888/bus/refresh

se escribirá a todas las colas y llegará a cada una de las aplicaciones, las cuales actualizarán los valores cuando llegue la orden /bus/refresh , por ejemplo:

curl -X POST http://localhost:8888/bus/refresh