jueves, 17 de septiembre de 2015

'SERVER SENT EVENTs' (SSE) con 'SPRING MVC' y 'REST'

'Server Sent Events' (SSE) es una tecnología web desde el navegador que recibe actualizaciones automáticas de un servidor a través del protocolo HTTP, en el cual el cliente (Interfaz web) envía una solicitud y el servidor tiene una conexión hasta que un nuevo mensaje está completado, luego, envía el mensaje de vuelta al cliente mientras se mantiene la conexión abierta de modo que pueda ser utilizado para otro mensaje una vez que esté disponible. Una vez que un nuevo mensaje esté completado, se envía la respuesta al cliente desde la misma conexión inicial (NO se generan multiples conexiones). Posteriormente, la aplicacion cliente debe tener un mecanismo para la recepción multiple de los mensajes (eventos), que serán constantemente enviados desde el servidor de forma individual, sin cerrar la conexión después de procesar cada mensaje.

Una de las aplicaciones de SSE es realizada para la implementación a nivel de SOA del patrón ''UI MEDIATOR'', que recomienda como solución la colocación de un mediador entre el servicio que el usuario ejecuta y el punto final del servicio, tal como lo muestra la imagen:

 

Es importante mencionar el 'SSE' actualmente está soportado por las ultims versiones de: CHROME, FIREFOX y OPERA, pero tengo entendido que SAFARI a la fecha aún no lo soporta.

Para completar esta idea se ha preparado dummy (la parte del Backend), desarrollado en SPRING MVC con REST(JSON), que cumple con el rol de 'Mediador', la idea es que una 'interfaze usuario' (NO implementada) envíe una solicitud al 'Servicio Mediador' (REST), este internamente y en paralelo simulará el consumo de otros servicios (esto incurrirá en tiempos distintos por c/u) y ante la recepción de los response de cada servicio del flujo, retornará eventos en JSON hacia la interface usuario.

La clase: 'SSEControlImpl.java', será la encargada de exponer los REST, y por medio de los objetos: 'SseEmitter' y 'ResponseBodyEmitter', se agregarán y responderá los eventos JSON por etapas:



La clase 'EAIProxyServiceImpl.java', será la encargada de la simulación (hardcode) de los 'proxys client' de otros servicios para completar el flujo, las transformaciones de los objetos a 'JSON', serán realizadas por medio de la api 'GSON': 



Para los llamados en paralelo de los servicios embebidos y la obtención de sus respuesta para poder enviar los eventos respectivos a la interfaz usuario, por cada servicio que no tenga dependencia, se creará una clase: 'MensajeThread0X' y se procederá a ejecutar de la siguiente manera:



En mi caso lo he desplegado con 'Tomcat7', es importante recordar que el soporte 'SSE' a nivel de SPRING, está disponible con sus librerías 4, en mi caso he usado las 4.2.1:

Para las pruebas del dummy las he reproducido propiamente desde el navegador ingresando a las URLs, amboss servicios tienen el mismo retorno de los eventos, solo que manejan diferente objeto para dicho manejo:

Servicio#1:
http://localhost:8080/DummySpringMvc_SSE/eai/json/sse/getMediador01



Servicio#2:
http://localhost:8080/DummySpringMvc_SSE/eai/json/sse/getMediador02



Para descargar las fuentes del dummy 'SSE' pulsar aquí: http://www.mediafire.com/download/ovqb9q1e60i8lgk/DummySpringMvc_SSE.zip


No hay comentarios: