oriented example event driven events integration soa messaging middleware

events - example - enfoques impulsados por mensajes frente a eventos para la integración de aplicaciones



event driven architecture example (7)

Me preguntaba si existe una clara distinción entre los entornos impulsados ​​por mensajes y los eventos cuando nos referimos a SOA o middleware y, en general, en casos de aplicaciones e integración empresarial. Entiendo que una interfaz de usuario se asemeja a un modelo impulsado por eventos donde nuestro sistema intercepta la acción del usuario.

También está claro que la mensajería admite sistemas basados ​​en publicar / suscribir, comunicación síncrona o asíncrona, transacciones, etc.

¿Pero hay una diferencia en el contexto de integración middleware / soa / aplicación? (nivel de arquitectura). Estoy tratando de consultar fuentes como wikipedia ( here y here ), pero todavía estoy algo confundido. ¿Cuándo debería un desarrollador preferir una solución sobre la otra?

¿Hay ejemplos o casos en que un enfoque tiene más sentido que el otro? ¿O cualquier recurso integral y guías para implementar cada uno?

Muchas gracias por cualquier idea.


Aquí hay un punto de vista Reactive / Typesafe - Typesafe sobre la pregunta de Jonas Bonér. Del tercer párrafo de esta publicación de blog : "La diferencia es que los mensajes se dirigen, los eventos no; un mensaje tiene un destinatario claramente direccionable mientras que un evento simplemente sucede para que otros (0-N) lo observen".


Como se explica muy bien en this artículo, para comprender el diseño impulsado por un evento, en lugar de mirar lo que presenta, debemos observar lo que oculta y eso no es más que lo básico de la programación; la "Pila de llamadas".

En el diseño impulsado por eventos, la definición de invocación de método sale directamente de la ventana. No hay más llamante y destinatario. Ese es un beso de despedida para llamar a la secuencia y el orden. El sistema no necesita saber en qué orden deben suceder las cosas. Por lo tanto, el espacio de memoria compartido, que es un requisito previo de la Pila de llamadas, se vuelve innecesario.

Sin embargo, en un entorno de pila de llamadas, no solo la persona que llama tiene que saber qué sucede después, sino que debe poder asociar una funcionalidad a un nombre de método.

Las aplicaciones orientadas a mensajes por defecto vienen con la eliminación de la memoria compartida. El editor y el suscriptor no necesitan compartir un espacio de memoria. Por otro lado, todas las demás características (es decir, orden, acoplamiento de nombres de métodos, etc.) no son necesarias.

Si el paso de mensajes está diseñado para cumplir con los axiomas de la arquitectura controlada por eventos, podrían considerarse idénticos. De lo contrario, hay una gran diferencia entre ellos.


Esta pregunta fue hecha hace mucho tiempo. Creo que el Reactive da una respuesta más moderna y clara en Message-Driven (en contraste con Event-Driven) :

Un mensaje es un elemento de datos que se envía a un destino específico. Un evento es una señal emitida por un componente al alcanzar un estado dado. En un sistema basado en mensajes, los destinatarios direccionables esperan la llegada de los mensajes y reaccionan ante ellos, de lo contrario permanecen inactivos. En un sistema controlado por eventos, las escuchas de notificación se adjuntan a las fuentes de los eventos de manera que se invocan cuando se emite el evento. Esto significa que un sistema basado en eventos se enfoca en fuentes de eventos direccionables mientras que un sistema basado en mensajes se concentra en destinatarios direccionables. Un mensaje puede contener un evento codificado como su carga útil.


La arquitectura impulsada por eventos y la arquitectura impulsada por mensajes son dos cosas diferentes y resuelven dos problemas diferentes.

El enfoque de Event Driven Architecture es cómo se activa el sistema para funcionar. La mayoría de los factores desencadenantes que se consideran eventos en el contexto de EDA son los eventos generados por medios distintos al teclado y el mouse. Es una EDA si eso nos hace pensar explícitamente sobre el generador de eventos, el canal de eventos o el motor de procesamiento de eventos.

Keyboard y Mouse son generadores de eventos obvios, sin embargo, el manejo de estos eventos ya se ha hecho cargo de varios frameworks o tiempos de ejecución y, como Arquitecto, no tenemos que preocuparnos por ello. Hay otros eventos que son específicos de cierto dominio en los que se espera que el Arquitecto piense. Ejemplo: eventos de gestión de la cadena de suministro: selección, paquete, envío, distribución, minorista, ventas, etc. Desde la perspectiva técnica para aplicaciones industriales de IoT, los eventos son: lectura de RFID, lectura bio-métrica, datos del sensor, escaneo de códigos de barras, eventos generados por el sistema son los eventos que deben tenerse en cuenta de forma explícita porque estos eventos impulsan la funcionalidad del sistema.

El enfoque de Message Driven Architecture consiste en integrar los sistemas distribuidos pasando mensajes de un módulo a otros módulos del sistema utilizando Middleware orientado a mensajes estándar.


La respuesta breve a "¿hay una distinción clara?" Sería "no".

Los términos no son completamente intercambiables, pero implican la misma arquitectura básica, específicamente que se desencadenarán eventos o mensajes.

El primer artículo al que hace referencia es sobre la plomería de bajo nivel, el "bus" de MOM o pub-sub que transporta los mensajes en su nombre. La arquitectura impulsada por eventos es lo que usted construye sobre ese marco.

El término orientado a eventos, aunque también se aplica al código GUI, no está realmente en el mismo nivel de abstracción. En ese caso, se trata de un patrón en comparación con la construcción de toda su empresa a lo largo de líneas impulsadas por mensaje / evento.


Las arquitecturas impulsadas por eventos se pueden implementar con o sin mensajes. La mensajería es una forma de comunicar los eventos planteados por los productores a los consumidores de una manera confiable y garantizada. Especialmente cuando productores y consumidores están verdaderamente desacoplados y pueden alojarse en diferentes servidores / máquinas virtuales / entornos y no tienen acceso directo a ninguna memoria compartida.

Sin embargo, en casos específicos, cuando el consumidor del evento es una función / devolución de llamada registrada en la misma aplicación, o cuando el consumidor debe ejecutarse de forma síncrona, la suscripción a eventos puede implementarse sin mensajes.


Si usamos un enfoque basado en eventos, generalmente queremos enviar el objeto fuente en este evento, componente que publicó el evento. Entonces, en el suscriptor podemos obtener no solo los datos, sino también saber quién publicó este evento. Por ejemplo, en el desarrollo móvil, recibimos la Vista, que puede ser un Botón, Imagen o alguna Vista personalizada. Y dependiendo del tipo de esta vista, podemos usar lógica diferente en el suscriptor. En este caso, podemos incluso agregar algún componente de origen, modificar el origen, por ejemplo, agregar animación a esa Vista fuente.

Cuando utilizamos el enfoque basado en mensajes, queremos publicar solo el mensaje con algunos datos. No importa para el suscriptor que publicó este mensaje, solo queremos recibir los datos y procesarlos de alguna manera.