====== Patrones de Integración ====== Las aplicaciones actuales interaccionan unas con otras y le hacen frente a los siguientes problemas: * Las redes son lentas y no fiables * Las aplicaciones son diferentes: Framework, sistema, codificación y codificación de los datos. * El cambio es inevitable, las aplicaciones evolucionan constantemente. Los desarrolladores suelen adoptar las siguientes soluciones: * Transferencia de ficheros. * Base de datos compartida. * Invocación de procesos remotos. * Envío de mensajes. ===== Elementos ===== ==== Mensaje ==== es una estructura de datos, puede ser un string, byte array, registro o un objeto Se puede interpretar como: * Dato * Una descripción de orden a ejecutar en el receptor * Descripción de un evento producido en el emisor Tiene 2 partes: * Body * Header ==== Canal ==== Son vías lógicas que conectan los programas y el listado de mensajes. Se comportan como una colección de mensajes. Se comparten entre ordenadores. Múltiples aplicaciones pueden usarlos simultáneamente. ==== Sender y Receiver ==== Lo que serían el emisor y el receptor ===== Sistema de mensajería ===== El envío de mensajes se realiza a través de un sistema de mensajería. Hay que diferenciar entre sistema de mensajería y una base de datos: * Un sistema de mensajería gestiona mensajes * Un gestor de base de datos gestiona persistencia ===== Pasos para transmitir un mensaje ===== - Create: El emeisor crea un mensaje y guarda los datos - Send: el emisor añade el mensaje al canal - Deliver: El sistema de mensajería lo entrega al receptor - Receive: El receptor lee el mensaje del canal - Process: el receptor extrae los datos del mensaje ===== Conceptos importantes ===== * Send and Forget: el emisor envía y olvida * Store and forward: * En el paso 2 el emisor envía y el sistema de mensajería guarda el mensaje en memoria o en disco * En el paso 3 el sistema de mensajería entrega el mensaje ===== Por que usar mensajería ===== * Es más inmediato que la transferencia de ficheros * Mejor encapsulado que compartir una base de datos * Más seguro que la invocación remota de procedimientos (RPC) * Permite que dos aplicaciones se comuniquen y transfieran datos sin serializar objetos * Permite la comunicación entre aplicaciones con distinto lenguaje, tecnología y plataformas * Comunicaciones asíncronas -> envío y me olvido * Variable timing, emisor y receptor trabajan a su ritmo * Mejor rendimiento del receptor que trabaja a su ritmo * Comunicación garantizada. * Permite operaciones desconectadas en sistemas cuya conexión a la red es limitada * Un sistema de mensajería puede actuar como mediador entre diversas aplicaciones * Se puede crear un sistema de bloqueo más eficiente cuando se espera un callback. ===== Retos del envío asíncrono ===== * Modelo de programación más complejo * No tenemos una secuencia de mensajes: no se puede asegurar cual va el primero y cual va el último * Escenarios asíncronos: no se puede usar en escenarios síncronos * Pérdida de rendimiento al enviar muchos datos. * Protocolos propios de cada fabricante. El problema de esto es que cambia el modelo de programación ya que estamos hablando de comunicaciones asíncronas. Para solucionar esto se mete un sistema de mensajería con una URL de retorno o leemos de otro sistema de mensajería para que nos confirme la recepción y procesamiento del mensaje. La URL invocaría un servicio para indicar que hemos terminado y continuar. ===== Implicaciones ===== * No existe un único hilo de ejecución, varios subprocesos tienen subprocedimientos * El emisor tiene que procesar los resultados incluso cuando está con otra tarea * El emisor debe detectar que subproceso generó el resultado recibido y combinarlo con los otros resultados * No se conoce el orden de llegada ===== Motivación ===== * Un patrón es una solución general correcta para un problema repetido y común. * No es la solución en sí, es un esquema o una guía. ===== Resumen ===== * Patones básicos * Message channel * Message * Pipes and filters * Message router * Message translator * Message endpoint * Canales de Mensajes * Point to point channel * Construcción de Mensajes * Command message * Document message * Enrutamiento de mensajes * Message filter * Splitter * Aggregator ===== Patrones ===== ==== Message Channel ==== Una aplicación necesita comunicarse con otra mediante mensajería, se implementa conectando la aplicación mediante el uso de un canal de mensajes. Una aplicación escribe información en un extremo del canal y otra lee la info del otro extremo. ==== Message ==== Se necesita que dos aplicaciones conectadas por un canal de mensajes intercambien informacion. Para ello se empaqueta la info en un mensaje, un conjunto de datos que el sistema de mensajería puede trasnmitir a través del canal. ==== Pipes and Filters ==== Se busca ejecutar tareas de procesamiento complejas sobre un mensaje manteniendo la independencia y la flexibilidad. Para ello se usa le estilo arquitectónico de tuberías y filtros para dividir las tareas de procesamiento largas en secuencias de pasos pequeños e independientes llamados filtros que son conectados por canales de mensajes llamados tuberías. ==== Message Router ==== Se busca desacoplar pasos de procesamiento individuales de manera que los mensajes puedan pasar por distintos filtros dependiendo de una serie de condiciones. ==== Message Translator ==== En sistemas con formatos de datos diferentes se busca comunicarlos entre sí usando mensajería. Apara ello se utiliza un tipo especial de filtro que traduzca los mensajes o aplicaciones para traducir los mensajes de un sistema a otro. ==== Message Endpoint ==== Una aplicación se conecta a un canal de mensajería para enviar y recibir mensajes. Para ello se conecta la aplicación a un canal de mensajes utilizando un extremo de mensajería, un cliente del sistema de mensajería que la aplicación puede usar para enviar y recibir mensajes. ==== point to point ==== ==== Publish-Suscribe Channel ==== Un emisor envía un evento a todos los receptores interesados. Se envia el elemento a través del canal publicar-suscribir que entrega una copia del evento a cada receptor interesado en el mismo. ==== Channel adapter ==== Se conecta una aplicación cerrada a un sistema de mensajería de manera que pueda enviar y recibir mensajes. Se usa un adaptador que puede acceder a la API o los datos de la aplicación y publicar mensajes con estos datos en el canal. Así mismo, el adaptador permitirá recibir mensajes e invocar funcionalidades de la aplicación. ==== Message Bus ==== Permite a aplicaciones trabajar juntas de una forma desacoplada, de manera que las aplicaciones puedan ser eliminadas o añadidas sin afectar a otras. ==== Command Message ==== usa la mensajería para invocar un procedimiento de otra aplicación. ==== Document Message ==== Utiliza la mensajería para transferir datos entre aplicaciones. ==== Event Message ==== Usar la mensajería para transmitir eventos entre aplicaciones. Utiliza un mensaje evento para la notificación asíncrona de eventos entre aplicaciones. ==== Message Filter ==== Busca evitar que una aplicación reciba ciertos mensajes. Se usa para eliminar mensajes no deseados de un canal de acuerdo a ciertos criterios dados. ==== Splitter ==== Procesa un mensja e que contiene múltiples elementos, troceándolos ==== Content Enricher ==== Comunica una aplicación con otra si el mensaje de origen no tiene toda la información requerida para alcanzar el destino. ==== Messaging Gateway ==== Hace un salto entre 2 sistemas de mensajerías distintas. ==== Message Dispatcher ==== Coordinar a múltiples consumidores en un único canal ==== Control Bus ==== Administra eficientemente un sistema de mensajería distribuido. Usa un bus de control para gestionar una solución de integración. El bus usa los mismos mecanismos que el sistema de mensajería pero usa sus propios canales y mensajes para transmitir datos relevantes para la gestión y monitorización del sistema.