M4-UF1 FRAMEWORK SPRING

UNIDAD 12: Colas de mensajes

eugeniaperez.es

UNIDAD 12: colas de mensajería

 

eugeniaperez.es

12.1 Utilidad de las colas de mensajes

Spring Fw proporciona 2 recursos habituales en aplicaciones empresariales como son las Message Queues y el envío de emails.

Las colas de mensajes permiten la comunicación asíncrona entre programas o sistemas. No solo permiten enviar mensajes, sino instancias de objetos.

UNIDAD 12: colas de mensajería

 

eugeniaperez.es

12.1 Utilidad de las colas de mensajes

Se ejemplificará esta aplicación mediante el uso de dos proyectos que funcionan conjuntamente, y que podrían haberse desarrollado en uno solo. No obstante, resulta interesante ver cómo podemos realizar proyectos independientes para luego reutilizarlos a través de Maven.

  • SpringMailer
  • SpringMessageQueueSimple

UNIDAD 12: colas de mensajería

 

eugeniaperez.es

12.1 Utilidad de las colas de mensajes

Caso práctico: el correo electrónico

En el ejemplo se dan pautas de configuración para utilizar una cuenta de Outlook válida. En caso de querer utilizar otro sistema, las configuraciones variarían.

No obstante, existen proyectos de servidores de correo falsos (Mock SMTP) que permiten llevar a cabo pruebas sin necesidad de utilizar una cuenta legítima...

unidad 12: colas de mensajería

 

eugeniaperez.es

Descarga el código en Bitbucket

 

Descarga el proyecto spring.email del repositorio de Bitbucket:

Usuario: 

Psswd:

URL: https://eugenia_perez@bitbucket.org/eugenia_perez/spring.email.git

 

 

UNIDAD 12: colas de mensajería

 

eugeniaperez.es

12.1 Utilidad de las colas de mensajes

Caso práctico: el correo electrónico

El proyecto es un proyecto de consola Spring con estructura Maven. Analizando sus ficheros:

  • beans.xml (springmailer): contiene configuración necesaria para que el envío funcione correctamente.
  • Como medida de seguridad podemos utilizar un fichero aparte: 
<context:property-placeholder location="emailer.properties" />

UNIDAD 12: colas de mensajería

 

eugeniaperez.es

12.1 Utilidad de las colas de mensajes

Caso práctico: el correo electrónico

La clase Email es prácticamente un POJO con un método añadido para mandar correos.

Internamente utilizar un helper para trabajar con adjuntos.

El atributo mailSender para enviar los correos le viene inyectado desde el beans.xml.

UNIDAD 12: colas de mensajería

 

eugeniaperez.es

12.1 Utilidad de las colas de mensajes

Caso práctico: el correo electrónico

La clase Main carga el contexto de Spring.

Recupera el bean del email y finalmente le establece las propiedades a través del fichero previamente configurado.

Recuerda que el proyecto está pensado para ser probado con una cuenta de Outlook (hotmail) válida.

 

UNIDAD 12: colas de mensajería

 

eugeniaperez.es

12.1 Utilidad de las colas de mensajes

Integración del correo electrónico y las colas de mensajería

Necesitaremos un servidor de colas de mensajes como Apache ActiveMQ. 

Descarga: http://activemq.apache.org/activemq-5111-release.html

Se descomprime el zip y se lanza el activemq.bat dentro de /bin

y en función del sistema (win64 o win32) 

Abre distintos puertos para varias tecnologías (websockets)

UNIDAD 12: colas de mensajería

 

eugeniaperez.es

12.1 Utilidad de las colas de mensajes

Integración del correo electrónico y las colas de mensajería

Para monitorizar la interfaz web: http://localhost:8161/

El acceso por defecto para gestionar el ActiveBroker sería (user) admin y (password) admin.

El panel está actualmente vacío pero será donde podamos ver las colas activas y los mensajes intercambiados.

 

UNIDAD 12: colas de mensajería

 

eugeniaperez.es

12.1 Utilidad de las colas de mensajes

Integración del correo electrónico y las colas de mensajería

El proyecto que vamos a analizar simula un sistema en el que se generan pedidos de un restaurante y se mandan a una cola de mensajes. Los mensajes son leídos y procesados, y por cada pedido se manda un email. 

 

UNIDAD 12: colas de mensajería

 

eugeniaperez.es

12.1 Utilidad de las colas de mensajes

Integración del correo electrónico y las colas de mensajería

Por lo tanto consiste en un proyecto Maven que intercambia mensajes entre dos hilos (Threads en Java) :

  • MessageSender: crea un pedido y lo manda a la cola
  • MessageReceiver: recibe el pedido de la cola y manda un email usando el proyecto anterior como dependencia Maven. Ambos deben implementar el método run().

unidad 12: COLAS DE MENSAJERÍA

 

eugeniaperez.es

Descarga el código en Bitbucket

 

Descarga el proyecto spring.messagequeue del repositorio de Bitbucket:

Usuario: 

Psswd:

URL: https://eugenia_perez@bitbucket.org/eugenia_perez/spring.messagequeue.git

 

 

UNIDAD 12: colas de mensajería

 

eugeniaperez.es

12.1 Utilidad de las colas de mensajes

Integración del correo electrónico y las colas de mensajería

El proyecto consta de:

  • Order: POJO que representa a un pedido.
  • MessageSender: a través de un bucle infinito genera instancias de pedido y las manda a la cola.
  • MessageReceiver: clase que recibe los pedidos.
  • Main: pone en marcha el MessageSender y el MessageReceiver.

 

UNIDAD 12: colas de mensajería

 

eugeniaperez.es

12.1 Utilidad de las colas de mensajes

Integración del correo electrónico y las colas de mensajería

El fichero de beans Spring:

  • Prepara el bean para usar ActiveMQ e indica su configuración (queue)
  • Se inyecta a MessageSender y a MessageReceiver
  • A su vez para que el MessageReceiver sea capaz de mandar un email de notificación, es preciso inyectarle el Emailer, desarrollado en el proyecto anterior.

 

UNIDAD 12: colas de mensajería

 

eugeniaperez.es

12.1 Utilidad de las colas de mensajes

Dependencia de otro proyecto Maven

Para incluir otro proyecto Maven en el buildpath se hace referencia al artefacto Maven que declara el otro proyecto SpringEmail, y que estará identificado por sus coordenadas: grupo, artefacto, etc. Es decir, dentro del pom.xml:

 

<groupId>org.sistema.spring.email</groupId>
<artifactId>springEmail</artifactId>
<version>0.0.1-SNAPSHOT</version>

UNIDAD 12: colas de mensajería

 

eugeniaperez.es

12.1 Utilidad de las colas de mensajes

Dependencia de otro proyecto Maven

Al ejecutar el Run As... > Maven install de ese proyecto en Eclipse, estaremos compilando, empaquetando en un JAR, etc, y lo más crucial, incluyéndolo en nuestro repositorio local de Maven: C:\Users\PORTATIL\.m2\repository a través del nombre de paquete: org.sistema.spring.email.

UNIDAD 12: colas de mensajería

 

eugeniaperez.es

12.1 Utilidad de las colas de mensajes

Dependencia de otro proyecto Maven

Una vez hecho, este artefacto Maven ya está disponible para ser usado en otros proyectos, añadiendo la dependencia anterior en el pom.xml.

También habrá que incluir la dependencia de ActiveMQ entre otras.

UNIDAD 12: colas de mensajería

 

eugeniaperez.es

12.1 Utilidad de las colas de mensajes

Dependencia de otro proyecto Maven

Para ejecutarlo:

Se debe tener configurado el from/to del Emailer. Nota: el from deberá coincidir con el del otro proyecto.

Se enviarán desde/hacia las cuentas que configuremos en el beans del springMessageQueue.

UNIDAD 12: colas de mensajería

 

eugeniaperez.es

12.1 Utilidad de las colas de mensajes

Cada vez que se ejecute se enviará un correo a la cuenta configurada por pedido generado.

Además en la interfaz de activeMQ (Queues) veremos cuántos mensajes se envían y cuántos se reciben:

Unit 12

By eugenia_perez