tutorial kafka alternatives rabbitmq message-queue amqp messagebroker mom

kafka - rabbitmq tutorial



Message Broker vs. MOM(Middleware Orientado a Mensajes) (3)

Estoy un poco confundido en cuanto a cuál es la diferencia entre un intermediario de mensajes, por ejemplo, RabbitMQ y Middleware orientado a mensajes. No puedo encontrar mucha información aparte de lo que está en Wikipedia. Al buscar en MOM, encuentro información en AMQP, que indica que es un protocolo para MOM. ¿Qué significa esto? ¿Qué es MOM entonces? También he leído que RabbitMQ implementa el protocolo AMPQ ... entonces, ¿por qué eso hace que un RabbitMQ sea un agente de mensajería? ¿Un intermediario de mensajes y MOM son lo mismo?

Espero que algunos puedan desentrañar mi confusión. Gracias


"MOM" en términos generales significa cualquier tecnología que pueda entregar "mensajes" de una aplicación de espacio de usuario a otra. Por lo general, se entiende que un mensaje es una información discreta, en comparación con una transmisión.

Los productos de MOM solían ser bastante grandes y complejos: CORBA, JMS, TIBCO, WebsphereMQ, etc. e intentaron hacer mucho más que simplemente entregar mensajes.

Un intermediario es un conjunto particular de patrones de enrutamiento y puesta en cola, y usualmente usamos el término "intermediario" específicamente en MOM (en comparación con HTTP, correo electrónico, XMPP, etc.) Medios de enrutamiento, un mensaje va a un par, a uno de muchos pares, a todos los compañeros, etc. La cola de espera significa que los mensajes se guardan en la memoria o en el disco hasta que se pueden entregar (y en algunos casos, se confirman).

AMQP se utilizaba para especificar esos patrones de intermediario, por lo que una aplicación podría confiar en un comportamiento consistente de cualquier intermediario compatible con AMQP (por lo tanto, RabbitMQ y OpenAMQ se parecían mucho a una aplicación cliente, como dos servidores HTTP o dos servidores XMPP se verían igual). AMQP / 1.0 especifica solo la conexión entre nodos, por lo que no tiene garantías de comportamiento. Esto hace que AMQP / 1.0 sea mucho más fácil de implementar para las empresas, pero no ofrece interoperabilidad.

ZeroMQ es un middleware orientado a mensajes que define, como AMQP / 1.0, las conexiones entre piezas en lugar del comportamiento de un intermediario central. Sin embargo, es relativamente fácil escribir corredores MOM utilizando 0MQ, y hemos hecho algunos de estos (como Majordomo).


Los intermediarios de mensajes son un tipo (muy popular) de MOM. Otro tipo de MOM sería MOM sin intermediarios, como ZeroMQ. Con MOM basada en intermediario, todos los mensajes van a un lugar central: intermediario y se distribuyen desde allí. El intermediario sin MOM generalmente permite la mensajería de igual a igual (pero no excluye la opción del servidor central).

AMQP es una definición de protocolo MOM basada en intermediario (al menos todas las versiones anteriores a la 1.0, lo que deriva en una MOM más general), y hay varios intermediarios de mensajes diferentes que implementan ese protocolo, RabbitMQ es solo uno de ellos.


Una visión general -

  • Un protocolo - Un conjunto de reglas.
  • AMQP : AMQP es un protocolo de Internet abierto para enviar y recibir mensajes de manera confiable.
  • MOM (middleware orientado a mensajes): es un enfoque, una arquitectura para un sistema distribuido, es decir, una capa intermedia para todo el sistema distribuido, donde hay mucha comunicación interna (un componente es la consulta de datos y luego debe enviarse al otro componente, que realizará un procesamiento de los datos), por lo que los componentes deben compartir información / datos entre ellos.
  • Message Broker : es cualquier sistema (en MOM) que maneja los mensajes (tanto de envío como de recepción) o, para ser más precisos, enruta los mensajes al consumidor / destinatario específico. Un intermediario de mensajes normalmente se basa en una MOM. El MOM proporciona la comunicación básica entre las aplicaciones y cosas como la persistencia de mensajes y la entrega garantizada. "Los intermediarios de mensajes son un componente básico del middleware orientado a mensajes".
  • Rabbitmq - un agente de mensajes; una implementación MOM; una implementación de código abierto de AMQP; según Wikipedia:

    RabbitMQ es un software de mensajería de código abierto (a veces llamado middleware orientado a mensajes) que implementa el Protocolo Avanzado de Message Queue Server (AMQP).

Como usted preguntó:

Al buscar en MOM, encuentro información en AMQP, que indica que es un protocolo para MOM. ¿Qué significa esto?

MOM trata de tener un middleware de mensajería (capa media) entre los componentes del sistema (distribuidos), y AMQP es un protocolo (conjunto de reglas) para enviar y recibir mensajes de manera confiable. Por lo tanto, una implementación MOM (es decir, Rabbitmq) puede usar AMQP.

¿Qué es MOM entonces?

Message-Oriented-Middleware: es un enfoque, una arquitectura para un sistema distribuido, es decir, una capa intermedia para todo el sistema distribuido, donde hay mucha comunicación interna (un componente es la consulta de datos y luego debe enviarse al otro componente, que estaremos procesando los datos), por lo que los componentes deben compartir información / datos entre ellos. En resumen, es una forma de diseñar un sistema, por ejemplo: dependiendo de los requisitos generales que necesitamos para desarrollar un sistema distribuido, con alguna comunicación interna. La mayor ventaja de la arquitectura / decisión de MOM es el desacoplamiento de los componentes, es decir, si vamos a cambiar el componente de consulta de datos, no tendrá ningún efecto en los componentes de procesamiento de datos, ya que se comunican a través de MOM (por ejemplo, Rabbitmq Cluster). el componente de procesamiento de datos es obtener los datos en mensajes de formulario, que luego los analiza y procesa.

Al final, MOM es solo una decisión de diseño, que usamos un middleware para pegar los componentes de nuestro sistema (distribuido), un middleware para manejar la comunicación entre ellos, en forma de mensajes (es decir, JSON). Para implementar un middleware orientado a mensajes necesitamos más: un conjunto de reglas específicas, es decir, cómo se publicarán y consumirán los mensajes, cómo funcionará el reconocimiento, la vida útil de un mensaje es hasta que se consuma, la persistencia de un mensaje, etc. .AMQP es básicamente este conjunto de reglas, es decir, un estándar / protocolo para implementar una MOM, es decir, un sistema de mensajería que usa AMQP, significa que se limita a las reglas establecidas. De Wikipedia:

AMQP ordena el comportamiento del proveedor de mensajería y el cliente en la medida en que las implementaciones de diferentes proveedores sean interoperables, de la misma manera que SMTP, HTTP, FTP, etc. han creado sistemas interoperables.

También he leído que RabbitMQ implementa el protocolo AMPQ ... entonces, ¿por qué hace que un RabbitMQ sea un intermediario de mensajes?

Sí, Rabbitmq es un intermediario de mensajes (editor -> intercambio -> cola -> consumidor). Es una implementación de AMQP de código abierto, es decir, un sistema / agente de mensajería que se limita a AMQP (las reglas de AMQP). Se puede usar Rabbitmq como middleware, por lo tanto, MOM.

AMQP: es solo un conjunto de reglas, es decir, los mensajes se publicarán, mantendrán (en colas), consumirán, confirmación de entrega, etc.

¿Un intermediario de mensajes y MOM son lo mismo?

En palabras sencillas, sí. Si necesitamos utilizar el diseño MOM para nuestro sistema distribuido, simplemente podemos usar Rabbitmq (un intermediario de mensajes; una implementación AMQP) como middleware.