libro

Prefacio

por John Crupi

¿Qué haces cuando llega una nueva tecnología? Aprendes la tecnología. Esto es exactamente lo que yo

hizo. Estudié J2EE (siendo de Sun Microsystems, parecía ser la elección lógica). Específicamente,

Me concentré en la tecnología EJB leyendo las especificaciones (ya que aún no había libros).

Sin embargo, aprender la tecnología es sólo el primer paso; el verdadero objetivo es aprender a utilizarla de manera efectiva.

aplicar la tecnología. Lo bueno de las tecnologías de plataforma es que te obligan a

realizando ciertas tareas. Pero, en lo que respecta a la tecnología, puedes hacer lo que quieras.

quieres y muy a menudo te metes en problemas si no haces las cosas apropiadamente.

Una cosa que he visto en los últimos 15 años es que parece haber dos áreas en las que el software

Los desarrolladores se obsesionan con: programar y diseñar, o más específicamente, programar y

diseñar de manera efectiva. Existen excelentes libros que le indican la forma más eficaz de

programan ciertas cosas en Java y C#, pero muchos menos le dicen cómo diseñar de manera efectiva. Eso es

donde entra en juego este libro. Cuando Deepak Alur, Dan Malks y yo escribimos Core J2EE Patterns,

Quería ayudar a los desarrolladores de J2EE a "diseñar" un mejor código. La mejor decisión que tomamos fue utilizar

patrones como el artefacto de elección. Como dice James Baty, un ingeniero distinguido de Sun, “Los patrones

Parece ser el punto óptimo del diseño”. No podría estar más de acuerdo y, por suerte para nosotros, Gregor y Bobby

sentir de la misma manera.

Este libro se centra en un tema candente y en crecimiento: la integración mediante mensajería. No sólo es

La mensajería es clave para la integración, pero lo más probable es que sea el enfoque predominante en los servicios web para

los próximos años. Hay tanto ruido hoy en día en el mundo de los servicios web, es un tema delicado y

esfuerzo complejo sólo para identificar las especificaciones y tecnologías en las que centrarse. La meta

Sin embargo, sigue siendo lo mismo: el software le ayuda a resolver un problema. Al igual que en los primeros días de

J2EE y .NET, todavía no existe mucha ayuda de diseño para servicios web. Mucha gente dice

Los servicios web son simplemente una forma nueva y abierta de resolver nuestros problemas de integración existentes, y estoy de acuerdo.

Pero eso no significa que sepamos cómo diseñar servicios web. Y eso nos lleva a la joya de

este libro. Creo que este libro tiene muchos de los patrones que necesitamos para diseñar servicios web y otros

sistemas de integración. Debido a que las especificaciones del servicio web todavía están en pugna, no sería

Ha tenido sentido que Bobby y Gregor proporcionen ejemplos de muchos de los servicios web.

especificaciones. Pero eso está bien. La verdadera recompensa se producirá cuando las especificaciones se vuelvan

estándares y utilizamos los patrones de este libro para diseñar aquellas soluciones que se realizan mediante

estos estándares. Entonces tal vez podamos alcanzar nuestro próximo objetivo de integración: diseñar para

Arquitecturas orientadas a servicios.

Lee este libro y mantenlo a tu lado. Mejorará su carrera de software sin fin.

John Crupi

Bethesda, Maryland, EE.UU.

agosto de 2003

Prefacio

por Martin Fowler

Mientras trabajaba en mi libro Patrones de arquitectura de aplicaciones empresariales, tuve la suerte de recibir

una revisión en profundidad de Kyle Brown y Rachel Reinitz en algunos talleres informales en Kyle's

oficina en Raleigh-Durham. Durante estas sesiones, nos dimos cuenta de que había un gran vacío en mi trabajo.

Sistemas de mensajería asincrónica.

Hay muchas lagunas en mi libro y nunca pretendí que fuera una colección completa de

Patrones para el desarrollo empresarial. Pero la brecha en la mensajería asincrónica es particularmente

importante porque creemos que la mensajería asincrónica desempeñará un papel cada vez más importante

papel en el desarrollo de software empresarial, particularmente en la integración. La integración es importante

porque las aplicaciones no pueden vivir aisladas unas de otras. Necesitamos técnicas que nos permitan

tomar aplicaciones que nunca fueron diseñadas para interoperar y romper los tubos de escape para que podamos

podemos obtener un beneficio mayor que el que las aplicaciones individuales pueden ofrecernos.

Han existido varias tecnologías que prometen resolver el rompecabezas de la integración. Todos

concluyó que la mensajería es la tecnología más prometedora. El desafío que tenemos

Lo que enfrentamos fue transmitir cómo enviar mensajes de manera efectiva. El mayor desafío en esto es que

Los mensajes son por naturaleza asincrónicos y existen diferencias significativas en el diseño.

enfoques que utiliza en un mundo asincrónico.

No tenía espacio, energía o, francamente, el conocimiento para cubrir este tema adecuadamente en Patrones.

de Arquitectura de Aplicaciones Empresariales. Pero se nos ocurrió una solución mejor para esta brecha: encontrar

alguien más que pudiera. Buscamos a Gregor y Bobby y aceptaron el desafío.

El resultado es el libro que estás a punto de leer.

Estoy encantado con el trabajo que han hecho. Si ya has trabajado con mensajería

sistemas, este libro sistematizará gran parte del conocimiento que usted y otros ya tienen.

aprendió de la manera más difícil. Si está a punto de trabajar con sistemas de mensajería, este libro le proporcionará una

base que será invaluable sin importar con qué tecnología de mensajería tengas para trabajar

con.

Martín Fowler

Melrose, Massachusetts, EE.UU.

agosto de 2003

Prefacio

Este es un libro sobre la integración empresarial mediante mensajería. No documenta ningún particular

tecnología o producto. Más bien, está diseñado para desarrolladores e integradores que utilizan una variedad de

productos y tecnologías de mensajería, tales como:

• Middleware orientado a mensajes (MOM) y suites de integración ofrecidas por proveedores como

IBM (familia WebSphere MQ), Microsoft (BizTalk), TIBCO, WebMethods, SeeBeyond,

Vitria y otros

• Implementaciones de Java Message Service (JMS) incorporadas en sistemas comerciales y

servidores de aplicaciones J2EE de código abierto, así como productos independientes

• Message Queuing de Microsoft (MSMQ), accesible a través de varias API, incluida la

Bibliotecas System.Messaging en Microsoft .NET

• Estándares de servicios web emergentes que soportan servicios web asíncronos (por ejemplo,

WS-ReliableMessaging) y las API asociadas, como la API Java de Sun para XML

Mensajería (JAXM) o Extensiones de servicios web de Microsoft (WSE).

La integración empresarial va más allá de la creación de una única aplicación con n niveles distribuidos

arquitectura, que permite distribuir una única aplicación en varios ordenadores.

Mientras que un nivel en una aplicación distribuida no puede ejecutarse por sí solo, las aplicaciones integradas son

programas independientes que cada uno puede ejecutarse por sí mismo, pero que funcionan coordinándose con cada uno

otros de manera débilmente acoplada. La mensajería permite enviar datos o comandos a través de la

red utilizando un enfoque de "enviar y olvidar" donde la persona que llama envía la información y luego

pasa a otros trabajos mientras la información es transmitida por el sistema de mensajería. Opcionalmente,

Posteriormente, la persona que llama puede ser notificada del resultado mediante una devolución de llamada. Llamadas asincrónicas y devoluciones de llamada

puede hacer que un diseño sea más complejo que un enfoque sincrónico, pero una llamada asincrónica puede ser

Vuelva a intentarlo hasta que tenga éxito, lo que hace que la comunicación sea mucho más confiable. Asincrónico

La mensajería también permite otras ventajas, como la limitación de solicitudes y la carga.

equilibrio.

Quién debería leer este libro

Este libro está diseñado para ayudar a los desarrolladores de aplicaciones e integradores de sistemas a conectar aplicaciones.

utilizando productos de middleware orientados a mensajes:

• Arquitectos y desarrolladores de aplicaciones que diseñan y construyen empresas complejas.

aplicaciones que necesitan integrarse con otras aplicaciones. Asumimos que eres

desarrollar sus aplicaciones utilizando una plataforma de aplicaciones empresariales moderna como

Plataforma Java 2, Enterprise Edition (J2EE) o el marco Microsoft .NET. Este libro

le ayudará a conectar la aplicación a una capa de mensajería e intercambiar información

con otras aplicaciones. Este libro se centra en la integración de aplicaciones, no en

Enviar comentarios

Paneles laterales

Historial

Guardado

Contribuir

aplicaciones de construcción; para ello le remitimos a Patrones de Aplicación Empresarial

Arquitectura de Martin Fowler.

• Arquitectos y desarrolladores de integración que diseñan y construyen soluciones de integración.

conectar aplicaciones empaquetadas o personalizadas. La mayoría de los lectores de este grupo tendrán

experiencia con una de las muchas herramientas de integración comercial como IBM WebSphere MQ,

TIBCO, WebMethods, SeeBeyond, Vitria, etc. Muchas de estas herramientas incorporan los patrones

presentado en este libro. Este libro ayuda a los lectores a comprender los conceptos subyacentes y

Tome decisiones de diseño seguras utilizando un vocabulario independiente del proveedor.

• Los arquitectos empresariales deben mantener una visión general del software y

Activos de hardware en una empresa. Este libro presenta un lenguaje consistente para describir

soluciones de integración a gran escala que pueden abarcar muchas tecnologías o puntos

soluciones. Este lenguaje también es un facilitador clave para una comunicación eficiente entre los

arquitecto empresarial y arquitectos y desarrolladores de integración y aplicaciones.

Lo que vas a aprender

Este libro no intenta presentar un argumento comercial para la integración de aplicaciones empresariales; el

La atención se centra en cómo hacerlo funcionar. Los lectores de este libro aprenderán cómo integrar la empresa

aplicaciones entendiendo:

• Las ventajas y limitaciones de la mensajería en comparación con otras técnicas de integración.

• Cómo determinar los canales de mensajes que necesitarán sus aplicaciones, cómo controlarlos

si varios consumidores pueden recibir el mismo mensaje y cómo manejarlos no válidos

mensajes

• Cuándo enviar un mensaje, qué debe contener y cómo utilizar un mensaje especial

propiedades

• Cómo enrutar un mensaje a su destino final incluso cuando el remitente no lo sabe

donde esta eso

• Cómo convertir mensajes cuando el remitente y el receptor no están de acuerdo en un acuerdo común

formato

• Cómo diseñar el código que conecta una aplicación al sistema de mensajería

• Cómo gestionar y monitorear un sistema de mensajería una vez que esté en uso como parte de la empresa

Incluso los lectores que estén familiarizados con estas prácticas se beneficiarán al tenerlas documentadas.

y poder utilizarlos para facilitar la comunicación con sus compañeros.

Lo que este libro no cubre

Creemos que cualquier libro que lleve la palabra "empresa" en el título probablemente caerá en uno de los siguientes

tres categorías. O intenta cubrir toda la amplitud del tema y será

obligados a no ofrecer una orientación detallada sobre cómo implementar soluciones reales. O el libro

proporcionar orientación práctica específica sobre el desarrollo de soluciones reales, pero se ve obligado a

limitar el alcance del área temática que aborda. Por último, los libros que intentan hacer ambas cosas son

Es probable que nunca se terminen o que se publiquen tan tarde que resulten irrelevantes. Optamos por el segundo.

elección y, con suerte, creó un libro que ayude a las personas a crear mejores soluciones de integración incluso

aunque tuvimos que limitar el alcance del libro. Temas que nos hubiera encantado discutir pero

Tuve que excluir para no caer en la trampa de la categoría tres: seguridad, datos complejos.

mapeo, flujo de trabajo, motores de reglas, escalabilidad y solidez, y transacciones distribuidas

procesamiento (XA, Tuxedo y similares). Elegimos la mensajería asincrónica como énfasis para esto.

libro porque está lleno de interesantes cuestiones de diseño y compensaciones y proporciona una abstracción limpia

de las muchas implementaciones proporcionadas por varios proveedores de integración.

Este libro tampoco es un tutorial sobre una tecnología de mensajería o middleware específica. Usted encontrará

ejemplos basados en una serie de tecnologías diferentes en este libro, como JMS, MSMQ, TIBCO,

Microsoft BizTalk, XSL, etc. Incluimos estos ejemplos con fines ilustrativos para mostrar a los lectores

cómo el patrón podría traducirse en una implementación real. Si usted está interesado en

Para obtener más información sobre cualquiera de estas tecnologías específicas, consulte uno de los libros a los que se hace referencia.

en la bibliografía o en uno de los muchos recursos en línea.

Cómo está organizado este libro

El núcleo del libro contiene 65 patrones que forman un lenguaje de patrones. Libros como Diseño

Patrones, arquitectura de software orientada a patrones, patrones centrales J2EE y patrones de empresa

La arquitectura de aplicaciones ha popularizado la noción de utilizar patrones para documentar

técnicas de programación informática. El concepto de patrones y lenguajes de patrones fue

Aplicado originalmente a la arquitectura de ciudades y edificios por Christopher Alexander en su obra seminal

obras Un lenguaje de patrones y una forma atemporal de construir. Para ayudar al lector a diseñar una integración.

solución, cada patrón representa una decisión que el lector debe tomar, explica el

consideraciones que afectan la decisión y presenta una solución bien considerada para guiar la

decisión. Un lenguaje de patrones es una red de patrones relacionados donde cada patrón conduce a otros,

guiar al lector a través del proceso de toma de decisiones. Este enfoque es una técnica poderosa.

para documentar el conocimiento de un experto de modo que pueda ser fácilmente comprendido y aplicado por

no expertos.

Un lenguaje de patrones enseña al lector cómo resolver una variedad ilimitada de problemas dentro de un

espacio problemático acotado. Debido a que el problema general que se está resolviendo es diferente cada vez,

el camino a través de los patrones y cómo se aplican también es único. De esta manera, este libro fue

escrito para cualquier persona que utilice cualquier herramienta de mensajería o integración para cualquier propósito, pero se puede aplicar

específicamente para usted y la aplicación específica de mensajería a la que se enfrenta.

Los patrones describen soluciones comúnmente aceptadas a problemas recurrentes, por lo que si eres un

desarrollador experimentado de soluciones de integración orientadas a mensajes, muchos de estos patrones

te resulta familiar. Sin embargo, incluso si ya reconoces la mayoría de estos patrones, todavía hay valor

al revisar este libro. Este libro debería validar la comprensión que tanto le ha costado ganar sobre cómo utilizar

mensajería. Le brinda una referencia consolidada para ayudarlo a transmitir sus conocimientos de manera efectiva a

colegas menos experimentados. También documenta detalles de las soluciones y relaciones entre

ellos de los que quizás no eras consciente. Finalmente, los nombres de los patrones le dan una idea común.

Vocabulario para discutir eficientemente alternativas de diseño de integración con sus compañeros.

Agradecimientos

Como la mayoría de los libros, la elaboración de Patrones de integración empresarial ha tardado mucho tiempo. La idea de

Los escritos sobre patrones de integración basados en mensajes se remontan al verano de 2001, cuando Martin

Estaba trabajando en patrones de arquitectura de aplicaciones empresariales. En ese momento, a Kyle se le ocurrió que

Si bien P de EAA habló mucho sobre cómo crear aplicaciones, solo toca brevemente cómo

integrarlos. Esta idea fue el punto de partida de una serie de reuniones entre Martin y Kyle.

eso también incluía a Rachel Reinitz y John Crupi. Bobby se unió a estas discusiones en el otoño de

2001, seguido por Gregor a principios de 2002. El verano siguiente, el grupo presentó dos artículos

para su revisión en la conferencia Pattern Languages of Programs (PLoP), escrita conjuntamente por

Bobby y Kyle y el otro por Gregor. Después de la conferencia, Kyle y Martin volvieron a centrarse en

sus propios proyectos de libros mientras Gregor y Bobby fusionaban sus artículos para formar la base del

libro. Al mismo tiempo, se puso en marcha el sitio www.enterpriseintegrationpatterns.com para permitir

arquitectos y desarrolladores de integración de todo el mundo para participar en la rápida evolución de

el contenido. Mientras trabajaban en el libro, Gregor y Bobby invitaron a los colaboradores a ayudar

descubrir el contenido del libro. Aproximadamente dos años después de la idea original de Kyle, llegó el manuscrito final.

el editor.

Este libro no habría sido posible sin la ayuda de una larga lista de colaboradores. Nombres

aquí...

Acerca de la imagen de portada

El tema común de los libros de Martin Fowler Signature Series es la imagen de un puente. En

En cierto sentido tuvimos suerte, porque ¿qué tema encajaría mejor con un libro sobre

¿integración? Durante miles de años, los puentes han ayudado a conectar a personas de diferentes orillas.

montañas o lados de la carretera.

Seleccionamos una imagen del Puente Taiko-bashi en el Santuario Sumiyoshi-taisha en Osaka, Japón

por su sencilla elegancia y belleza. Como santuario sintoísta dedicado a la deidad guardiana de los marineros,

Originalmente se construyó junto al agua. Curiosamente, la recuperación de tierras ha empujado al agua

de distancia, de modo que el santuario hoy se encuentra casi tres millas tierra adentro. Unos 3 millones de personas visitan este

Santuario al comienzo de un nuevo año.

Introducción

Las aplicaciones interesantes rara vez viven aisladas. Si su aplicación de ventas debe interactuar

con su aplicación de inventario, su aplicación de adquisición debe conectarse a un sitio de subasta,

o el PIM de su PDA debe sincronizarse con el servidor de calendario corporativo, parece que cualquier

La aplicación se puede mejorar integrándola con otras aplicaciones.

Todas las soluciones de integración tienen que afrontar algunos desafíos fundamentales:

• Las redes no son confiables. Las soluciones de integración tienen que transportar datos de una computadora a

otro a través de redes. En comparación con un proceso que se ejecuta en una sola computadora,

La computación distribuida tiene que estar preparada para lidiar con un conjunto mucho mayor de posibles

problemas. Muchas veces, dos sistemas a integrar están separados por continentes y datos.

entre ellos tiene que viajar a través de líneas telefónicas, segmentos LAN, enrutadores, conmutadores,

redes y enlaces satelitales. Cada uno de estos pasos puede causar retrasos o interrupciones.

• Las redes son lentas. Enviar datos a través de una red es varios órdenes de magnitud más lento

que hacer una llamada a un método local. Diseñar una solución ampliamente distribuida de la misma manera

te acercarías a una sola aplicación podría tener un rendimiento desastroso

trascendencia.

• Dos aplicaciones cualesquiera son diferentes. Las soluciones de integración necesitan transmitir información.

entre sistemas que utilizan diferentes lenguajes de programación, plataformas operativas y

formatos de datos. Una solución de integración debe poder interactuar con todos estos diferentes

tecnologías.

• El cambio es inevitable. Las aplicaciones cambian con el tiempo. Una solución de integración debe mantener

al ritmo de los cambios en las aplicaciones que conecta. Las soluciones de integración pueden obtenerse fácilmente

atrapado en una avalancha de cambios: si un sistema cambia, todos los demás sistemas pueden

Ser afectado. Una solución de integración necesita minimizar las dependencias de un sistema.

a otro mediante el uso de un acoplamiento flojo entre aplicaciones.

Con el tiempo, los desarrolladores han superado estos desafíos con cuatro enfoques principales:

1. Transferencia de archivos: una aplicación escribe un archivo que otra lee más tarde. Las aplicaciones

Es necesario acordar el nombre del archivo y la ubicación, el formato del archivo, el momento en que se

se escribirá y leerá, y quién eliminará el archivo.

2. Base de datos compartida: varias aplicaciones comparten el mismo esquema de base de datos, ubicado en un

base de datos física única. Como no hay almacenamiento de datos duplicados, no es necesario almacenar datos.

transferidos de una aplicación a otra.

3. Invocación de procedimiento remoto: una aplicación expone parte de su funcionalidad para que

otras aplicaciones pueden acceder de forma remota como procedimiento remoto. El

La comunicación se produce en tiempo real y sincrónicamente.

4. Mensajería: una aplicación publica un mensaje en un canal de mensajes común. Otro

las aplicaciones pueden leer el mensaje del canal más adelante. Las aplicaciones deben

Acordar un canal así como el formato del mensaje. La comunicación es

asincrónico.

Si bien los cuatro enfoques resuelven esencialmente el mismo problema, cada estilo tiene sus diferencias.

ventajas y desventajas. De hecho, las aplicaciones pueden integrarse utilizando múltiples estilos, de modo que

cada punto de integración aprovecha el estilo que más le conviene.

¿Qué es la mensajería?

Este libro trata sobre cómo utilizar la mensajería para integrar aplicaciones. Una forma sencilla de entender

lo que hace la mensajería es considerar el sistema telefónico. Una llamada telefónica es una forma sincrónica.

de comunicación. Sólo puedo comunicarme con la otra parte si la otra parte está disponible en

el momento en que hago la llamada. El correo de voz, por otro lado, permite la comunicación asincrónica. Con

correo de voz, cuando el receptor no responde, la persona que llama puede dejarle un mensaje; más tarde el

El receptor (a su conveniencia) puede escuchar los mensajes en cola en su buzón. El correo de voz habilita

que la persona que llama deje un mensaje ahora para que el receptor pueda escucharlo más tarde, lo cual es mucho más fácil que

intentando que la persona que llama y el receptor hablen por teléfono al mismo tiempo. Paquetes de correo de voz (en

al menos parte de) una llamada telefónica en un mensaje y lo pone en cola para su consumo posterior; esto es esencialmente

cómo funciona la mensajería.

La mensajería es una tecnología que permite comunicación asincrónica y de alta velocidad entre programas.

Comunicación con entrega confiable. Los programas se comunican enviando paquetes de datos llamados

mensajes entre sí. Los canales, también conocidos como colas, son vías lógicas que conectan el

programas y transmitir mensajes. Un canal se comporta como una colección o conjunto de mensajes, pero uno

que se comparte mágicamente entre varias computadoras y puede ser utilizado simultáneamente por múltiples

aplicaciones. Un remitente o productor es un programa que envía un mensaje escribiéndolo en un

canal. Un receptor o consumidor es un programa que recibe un mensaje leyéndolo (y eliminándolo)

desde un canal.

El mensaje en sí es simplemente algún tipo de estructura de datos, como una cadena, una matriz de bytes, un registro,

o un objeto. Puede interpretarse simplemente como datos, como la descripción de un comando que se va a invocar.

en el receptor, o como la descripción de un evento que ocurrió en el remitente. un mensaje en realidad

Contiene dos partes, un encabezado y un cuerpo. El encabezado contiene metainformación sobre el

mensaje: quién lo envió, adónde va, etc.; Esta información es utilizada por el sistema de mensajería.

y las aplicaciones que utilizan los mensajes lo ignoran en su mayor parte (pero no siempre). El cuerpo contiene

los datos que se transmiten y son ignorados por el sistema de mensajería. En una conversación, cuando un

El desarrollador de aplicaciones que utiliza la mensajería habla de un mensaje, normalmente se refiere al

datos en el cuerpo del mensaje.

Las arquitecturas de mensajería asincrónica son poderosas, pero requieren que reconsideremos nuestro desarrollo.

acercarse. En comparación con los otros tres enfoques de integración, relativamente pocos desarrolladores han

tenido exposición a mensajería y sistemas de mensajes. Como resultado, los desarrolladores de aplicaciones en general

No estamos tan familiarizados con los modismos y peculiaridades de esta plataforma de comunicación.

¿Qué es un sistema de mensajería?

Las capacidades de mensajería generalmente las proporciona un sistema de software independiente llamado mensajería.

sistema o middleware orientado a mensajes (MOM). Un sistema de mensajería gestiona la mensajería de la misma manera que un

El sistema de base de datos gestiona la persistencia de los datos. Así como un administrador debe poblar la base de datos

con el esquema para los datos de una aplicación, un administrador debe configurar el sistema de mensajería

con los canales que definen las vías de comunicación entre las aplicaciones. El

El sistema de mensajería coordina y gestiona el envío y la recepción de mensajes. El

El objetivo principal de una base de datos es garantizar que cada registro de datos persista de forma segura y, de la misma manera,

La tarea principal de un sistema de mensajería es mover mensajes desde la computadora del remitente a la

computadora del receptor de manera confiable.

La razón por la que se necesita un sistema de mensajería para mover mensajes de una computadora a otra es que

Las computadoras y las redes que las conectan son inherentemente poco confiables. Sólo porque uno

aplicación esté lista para enviar una comunicación no significa que la otra aplicación esté lista para enviar

recíbelo. Incluso si ambas aplicaciones están listas, es posible que la red no esté funcionando o que no funcione correctamente.

transmitir los datos correctamente. Un sistema de mensajería supera estas limitaciones intentando repetidamente

transmitir el mensaje hasta lograrlo. En circunstancias ideales, el mensaje se transmite

con éxito en el primer intento, pero las circunstancias a menudo no son las ideales.

En esencia, un mensaje se transmite en cinco pasos:

1. Crear: el remitente crea el mensaje y lo completa con datos.

2. Enviar: el remitente agrega el mensaje a un canal.

3. Entregar: el sistema de mensajería mueve el mensaje desde la computadora del remitente a la

computadora del receptor, poniéndolo a disposición del receptor.

4. Recibir: el receptor lee el mensaje del canal.

5. Proceso: el receptor extrae los datos del mensaje.

Este diagrama ilustra estos cinco pasos de transmisión, qué computadora realiza cada uno y cuál

Los pasos involucran el sistema de mensajería:

Este diagrama también ilustra dos conceptos de mensajería importantes:

1. Enviar y olvidar: en el paso 2, la aplicación emisora envía el mensaje al mensaje

canal. Una vez que se completa el envío, el remitente puede continuar con otro trabajo mientras el

El sistema de mensajería transmite el mensaje en segundo plano. El remitente puede estar seguro

que el receptor eventualmente recibirá el mensaje y no tendrá que esperar hasta que

sucede.

2. Almacenar y reenviar: en el paso 2, cuando la aplicación emisora envía el mensaje al

canal de mensaje, el sistema de mensajería almacena el mensaje en la computadora del remitente,

ya sea en memoria o en disco. En el paso 3, el sistema de mensajería entrega el mensaje mediante

reenviarlo desde la computadora del remitente a la computadora del receptor, y luego almacena el

mensaje una vez más en la computadora del receptor. Este proceso de almacenamiento y reenvío puede ser

se repite muchas veces, a medida que el mensaje se mueve de una computadora a otra, hasta que

llega al ordenador del receptor.

Los pasos de crear, enviar, recibir y procesar pueden parecer una sobrecarga innecesaria. Por qué no

¿Simplemente entregar los datos al receptor? Envolviendo los datos como un mensaje y almacenándolos en el

sistema de mensajería, las aplicaciones delegan en el sistema de mensajería la responsabilidad de

entregando los datos. Debido a que los datos están empaquetados como un mensaje atómico, se puede volver a intentar la entrega.

hasta que tenga éxito y el receptor pueda estar seguro de recibir de manera confiable exactamente una copia de los datos.

¿Por qué utilizar la mensajería?

Ahora que sabemos qué es la mensajería, deberíamos preguntarnos: ¿Por qué utilizar la mensajería? Como con cualquier

solución sofisticada, no existe una respuesta sencilla. La respuesta rápida es que la mensajería es más

inmediato que File Transfer, mejor encapsulado que Shared Database y más confiable que

Invocación de Procedimiento Remoto. Sin embargo, eso es sólo el comienzo de las ventajas que se pueden obtener.

obtenidos mediante la mensajería.

Los beneficios específicos de la mensajería incluyen:

Comunicación remota. La mensajería permite que aplicaciones separadas se comuniquen y

transferir datos. Dos objetos que residen en el mismo proceso pueden simplemente compartir los mismos datos.

en memoria. Enviar datos a otra computadora es mucho más complicado y requiere

datos que se van a copiar de una computadora a otra. Esto significa que los objetos tienen que

"serializables", es decir, se pueden convertir en un flujo de bytes simple que se puede enviar a través de

la red. Si no se necesita comunicación remota, no se necesitan mensajes; un mas simple

Una solución como colecciones simultáneas o memoria compartida es suficiente.

• Integración de plataforma/idioma. Cuando se conectan varios sistemas informáticos de forma remota

comunicación, estos sistemas probablemente utilicen diferentes lenguajes, tecnologías y plataformas,

quizás porque fueron desarrollados con el tiempo por equipos independientes. Integrando tales

Las aplicaciones divergentes pueden requerir una zona desmilitarizada de middleware para negociar.

entre las aplicaciones, a menudo utilizando el mínimo común denominador, como datos planos

archivos con formatos oscuros. En estas circunstancias, un sistema de mensajería puede ser universal.

Traductor entre las aplicaciones que funciona con el idioma y plataforma de cada una.

sus propios términos, pero les permite comunicarse a través de un mensaje común

paradigma. Esta conectividad universal es el corazón del patrón Message Bus.

• Comunicación asíncrona. La mensajería permite un enfoque de enviar y olvidar para

comunicación. El remitente no tiene que esperar a que el receptor reciba y procese

el mensaje; ni siquiera tiene que esperar a que el sistema de mensajería entregue el

mensaje. El remitente sólo necesita esperar a que se envíe el mensaje, p. para que el mensaje

ser almacenado exitosamente en el canal por el sistema de mensajería. Una vez que el mensaje es

almacenado, el remitente es libre de realizar otros trabajos mientras el mensaje se transmite en

el fondo. Es posible que el receptor desee enviar un acuse de recibo o un resultado a

el remitente, lo que requiere otro mensaje, cuya entrega deberá ser detectada por un

Mecanismo de devolución de llamada en el remitente.

• Temporización variable. Con la comunicación síncrona, la persona que llama debe esperar a que el receptor

Termine de procesar la llamada antes de que la persona que llama pueda recibir el resultado y continuar. De este modo,

la persona que llama sólo puede realizar llamadas tan rápido como el receptor puede realizarlas. Por otro lado,

La comunicación asincrónica permite al remitente enviar solicitudes por lotes al receptor en su

propio ritmo y que el receptor consuma las solicitudes a su propio ritmo diferente. Este

permite que ambas aplicaciones se ejecuten al máximo rendimiento y no pierdan tiempo esperando

entre sí (al menos hasta que el receptor se quede sin mensajes para procesar).

• Estrangulamiento. Un problema con las llamadas a procedimientos remotos es que muchas de ellas en una sola

receptor al mismo tiempo puede sobrecargarlo. Esto puede provocar que el rendimiento

degradación e incluso causar que el receptor se bloquee. La comunicación asincrónica permite

el receptor controle la velocidad a la que consume solicitudes, para no volverse

sobrecargado por demasiadas solicitudes simultáneas. El efecto adverso en las personas que llaman causado por

Esta limitación se minimiza porque la comunicación es asincrónica, por lo que las personas que llaman

no están bloqueados esperando en el receptor.

• Comunicación confiable. La mensajería proporciona una entrega confiable que una llamada a procedimiento remoto

(RPC) no puede. La razón por la que la mensajería es más confiable que RPC es que la mensajería utiliza un

Método de almacenamiento y reenvío para transmitir mensajes. Los datos se empaquetan como mensajes,

que son unidades atómicas independientes. Cuando el remitente envía un mensaje, el mensaje

El sistema almacena el mensaje. Luego entrega el mensaje reenviándolo al destinatario.

computadora, donde se almacena nuevamente. Almacenar el mensaje en la computadora del remitente y en el

Se supone que la computadora del receptor es confiable. (Para hacerlo aún más confiable, el

los mensajes se pueden almacenar en el disco en lugar de en la memoria; consulte Entrega garantizada). ¿Qué es

no confiable es reenviar (mover) el mensaje desde la computadora del remitente al

computadora del receptor, porque es posible que el receptor o la red no estén funcionando correctamente.

El sistema de mensajería soluciona esto reenviando el mensaje hasta que lo logra. Este

El reintento automático permite que el sistema de mensajería supere los problemas con la red.

de modo que el remitente y el receptor no tengan que preocuparse por estos detalles.

• Operación desconectada. Algunas aplicaciones están diseñadas específicamente para ejecutarse sin conexión

desde la red, pero aún debe sincronizarse con los servidores cuando se establece una conexión de red.

disponible. Estas aplicaciones se implementan en plataformas como computadoras portátiles, PDA y

tableros de instrumentos de automóviles. La mensajería es ideal para permitir que estas aplicaciones

sincronizar: los datos que se van a sincronizar se pueden poner en cola a medida que se crean, esperando hasta que

La aplicación se vuelve a conectar a la red.

• Mediación. El sistema de mensajería actúa como mediador, como en el patrón Mediador.

[GoF]: entre todos los programas que pueden enviar y recibir mensajes. Una aplicación

Puede usarlo como un directorio de otras aplicaciones o servicios disponibles para integrar. Si una

La aplicación se desconecta de las demás, solo necesita volver a conectarse al

sistema de mensajería, no a todas las demás aplicaciones de mensajería. El sistema de mensajería.

se puede utilizar para proporcionar una gran cantidad de conexiones distribuidas a un recurso compartido,

como por ejemplo una base de datos. El sistema de mensajería puede emplear recursos redundantes para proporcionar

alta disponibilidad, equilibrar la carga, redirigir conexiones de red fallidas y ajustar

desempeño y calidad del servicio.

• Gestión de Hilos. La comunicación asincrónica significa que una aplicación no

tendrá que bloquear mientras espera que otra aplicación realice una tarea, a menos que así lo desee.

En lugar de bloquear para esperar una respuesta, la persona que llama puede usar una devolución de llamada que alertará al

persona que llama cuando llegue la respuesta. (Consulte el patrón Solicitud-Respuesta). Una gran cantidad de mensajes bloqueados

Los hilos, o los hilos bloqueados durante mucho tiempo, pueden ser problemáticos. Demasiados bloqueados

Los subprocesos pueden dejar la aplicación con muy pocos subprocesos disponibles para realizar un trabajo real. Si

una aplicación con algún número dinámico de subprocesos bloqueados falla, cuando el

La aplicación se reinicia y recupera su estado anterior, restablecer esos subprocesos será

difícil. Con las devoluciones de llamada, los únicos subprocesos que se bloquean son un número pequeño y conocido de

oyentes esperando respuestas. Esto deja la mayoría de los hilos disponibles para otros trabajos y define

un número conocido de subprocesos de escucha que pueden restablecerse fácilmente después de un fallo.

Por lo tanto, existen varias razones diferentes por las que una aplicación o empresa puede beneficiarse de

mensajería. Algunos de estos son detalles técnicos con los que los desarrolladores de aplicaciones se identifican más fácilmente,

mientras que otras son decisiones estratégicas que resuenan mejor entre los arquitectos empresariales. Cual de estos

Las razones más importantes dependen de los requisitos actuales de sus aplicaciones particulares.

Todas son buenas razones para utilizar la mensajería, así que aproveche las razones que le proporcionen la

mayor beneficio para usted.

Desafíos de la mensajería asincrónica

La mensajería asincrónica no es la panacea de la integración. Resuelve muchos de los desafíos de

integrar sistemas dispares de una manera elegante pero también introduce nuevos desafíos. Algunos de

Estos desafíos son inherentes al modelo asincrónico, mientras que otros desafíos varían según el modelo.

Implementación específica de un sistema de mensajería.

• Modelo de programación complejo. La mensajería asincrónica requiere que los desarrolladores trabajen con

Un modelo de programación basado en eventos. La lógica de la aplicación ya no se puede codificar en un

método único que invoca otros métodos, pero la lógica no se divide en una serie de

Controladores de eventos que responden a los mensajes entrantes. Un sistema de este tipo es más complejo y

más difícil de desarrollar y depurar. Por ejemplo, el equivalente de una llamada a un método simple puede

requieren un mensaje de solicitud y un canal de solicitud, un mensaje de respuesta y un canal de respuesta, un

identificador de correlación y una cola de mensajes no válidos (como se describe en Solicitud-Respuesta).

• Problemas de secuencia. Los canales de mensajes garantizan la entrega de mensajes, pero no garantizan

cuándo se entregará el mensaje. Esto puede provocar que los mensajes que se envían en secuencia

salirse de la secuencia. En situaciones en las que los mensajes dependen unos de otros, se ha tenido especial cuidado

medidas a tomar para restablecer la secuencia del mensaje.

• Escenarios sincrónicos. No todas las aplicaciones pueden funcionar en modo enviar y olvidar. Si un usuario

está buscando boletos de avión, querrá ver el precio del boleto de inmediato,

no después de un tiempo indeterminado. Por lo tanto, muchos sistemas de mensajería necesitan unir

la brecha entre soluciones sincrónicas y asincrónicas. (Ver la Solicitud-Respuesta

patrón.)

• Actuación. Los sistemas de mensajería añaden algunos gastos generales a la comunicación. requiere esfuerzo

convertir datos en un mensaje y enviarlo, y recibir un mensaje y procesarlo. Si usted

tener que transportar una gran cantidad de datos, dividirlos en millones de piezas pequeñas puede no ser

ser una idea inteligente. Por ejemplo, si una solución de integración necesita sincronizar información

entre dos sistemas existentes, el primer paso suele ser replicar toda la información relevante

de un sistema a otro. Para tal paso de replicación masiva de datos, ETL (extraer,

transformar y cargar) las herramientas son mucho más eficientes que la mensajería. Lo mejor es enviar mensajes

Adecuado para mantener los sistemas sincronizados después de la replicación de datos inicial.

• Soporte de plataforma limitado. Muchos sistemas de mensajería propietarios no están disponibles en todos

plataformas. Muchas veces es más fácil enviar un archivo por FTP a otra plataforma que acceder a él a través de un

sistema de mensajería.

• Dependencia de un proveedor. Muchas implementaciones de sistemas de mensajería se basan en protocolos propietarios.

Incluso las especificaciones de mensajería comunes, como JMS, no controlan el contenido físico.

implementación de la solución. Como resultado, los diferentes sistemas de mensajería generalmente no

conectarse entre sí. Esto puede plantearle un desafío de integración completamente nuevo:

integrando múltiples soluciones de integración! (Consulte el patrón Puente de mensajería).

Por lo tanto, la mensajería asincrónica no resuelve todos los problemas e incluso puede crear algunos nuevos.

Tenga en cuenta estas consecuencias al decidir qué problemas resolver mediante la mensajería

 

Pensando asincrónicamente

La mensajería es una tecnología asincrónica que permite volver a intentar la entrega hasta que se realiza correctamente.

Por el contrario, la mayoría de las aplicaciones utilizan llamadas a funciones síncronas; por ejemplo: un procedimiento que llama a un

subprocedimiento, un método que llama a otro método, o un procedimiento que invoca a otro de forma remota

a través de una llamada a procedimiento remoto (RPC) (como CORBA y DCOM). Las llamadas sincrónicas implican

que el proceso de llamada se detiene mientras el subproceso está ejecutando una función. Incluso en un RPC

escenario, donde el subprocedimiento llamado se ejecuta en un proceso diferente, la persona que llama bloquea hasta

el subprocedimiento devuelve el control (y los resultados) a la persona que llama. Cuando se usa asíncrono

mensajería, la persona que llama utiliza un enfoque de enviar y olvidar que le permite continuar ejecutándose después de

envía el mensaje. Como resultado, el procedimiento de llamada continúa ejecutándose mientras el subprocedimiento está

siendo invocado.

 

Semántica de llamadas sincrónicas y asincrónicas La comunicación asincrónica tiene varias implicaciones. Primero, ya no tenemos un solo hilo de ejecución. Varios subprocesos permiten que los subprocedimientos se ejecuten simultáneamente, lo que puede mejorar en gran medida el rendimiento y ayudar a garantizar que algunos subprocesos progresen incluso mientras otros subprocesos pueden estar esperando resultados externos. Sin embargo, los subprocesos simultáneos también pueden dificultar mucho la depuración. En segundo lugar, los resultados (si los hay) llegan mediante una devolución de llamada. Esto permite a la persona que llama realizar otras tareas y recibir una notificación cuando el resultado esté disponible, lo que puede mejorar el rendimiento. Sin embargo, la persona que llama debe poder procesar el resultado incluso mientras está realizando otras tareas, y debe poder utilizar el resultado para recordar el contexto en el que se realizó la llamada. En tercer lugar, los subprocesos asincrónicos se pueden ejecutar en cualquier orden. Nuevamente, esto permite que un subprocedimiento avance incluso mientras que otro no puede hacerlo. Pero también significa que los subprocesos deben poder ejecutarse de forma independiente en cualquier orden, y la persona que llama debe poder determinar qué resultado proviene de qué subproceso y combinar los resultados. Por tanto, la comunicación asincrónica tiene varias ventajas, pero requiere repensar cómo un procedimiento utiliza sus subprocedimientos. Aplicaciones distribuidas versus integración Este libro trata sobre la integración empresarial: cómo integrar aplicaciones independientes para que puedan trabajar juntas. Una aplicación empresarial a menudo incorpora una arquitectura de n niveles (una

Semántica de llamadas sincrónicas y asincrónicas La comunicación asincrónica tiene varias implicaciones. Primero, ya no tenemos un solo hilo de ejecución. Varios subprocesos permiten que los subprocedimientos se ejecuten simultáneamente, lo que puede mejorar en gran medida el rendimiento y ayudar a garantizar que algunos subprocesos progresen incluso mientras otros subprocesos pueden estar esperando resultados externos. Sin embargo, los subprocesos simultáneos también pueden dificultar mucho la depuración. En segundo lugar, los resultados (si los hay) llegan mediante una devolución de llamada. Esto permite a la persona que llama realizar otras tareas y recibir una notificación cuando el resultado esté disponible, lo que puede mejorar el rendimiento. Sin embargo, la persona que llama debe poder procesar el resultado incluso mientras está realizando otras tareas, y debe poder utilizar el resultado para recordar el contexto en el que se realizó la llamada. En tercer lugar, los subprocesos asincrónicos se pueden ejecutar en cualquier orden. Nuevamente, esto permite que un subprocedimiento avance incluso mientras que otro no puede hacerlo. Pero también significa que los subprocesos deben poder ejecutarse de forma independiente en cualquier orden, y la persona que llama debe poder determinar qué resultado proviene de qué subproceso y combinar los resultados. Por tanto, la comunicación asincrónica tiene varias ventajas, pero requiere repensar cómo un procedimiento utiliza sus subprocedimientos. Aplicaciones distribuidas versus integración Este libro trata sobre la integración empresarial: cómo integrar aplicaciones independientes para que puedan trabajar juntas. Una aplicación empresarial a menudo incorpora una arquitectura de n niveles (una


Comentarios

Entradas populares de este blog

¿Como llamar una función del componente padre desde un componente hijo, en angular 8?

Frontend: Suscripciones y Observables con Angular 8

Enrutado con lazy loading en angular 8