ConejoMQ. Parte 1. Introducción. Erlang, AMQP

¡Buenas tardes Habr! Quiero compartir un libro de texto de conocimiento de referencia que logré recopilar en RabbitMQ y condensarlo en breves recomendaciones y conclusiones.

tabla de contenidos

  • ConejoMQ. Parte 1. Introducción. Erlang, AMQP y RPC
  • ConejoMQ. Parte 2. Comprender los intercambios
  • ConejoMQ. Parte 3. Comprender las colas y los enlaces
  • ConejoMQ. Parte 4. Comprender qué son los mensajes y los marcos
  • ConejoMQ. Parte 5: Publicación y consumo de rendimiento de mensajes
  • ConejoMQ. Parte 6. Descripción general de los módulos Federation y Shovel
  • ConejoMQ. Parte 7. Detalles sobre Connection y Chanel
  • ConejoMQ. Parte 8. RabbitMQ en .NET
  • ConejoMQ. Parte 9. Monitoreo

Brevemente sobre AMQP

AMQP (Protocolo avanzado de cola de mensajes) es un protocolo abierto para transmitir mensajes entre componentes del sistema. La idea básica es que los subsistemas individuales (o aplicaciones independientes) puedan intercambiar mensajes de manera arbitraria a través de un intermediario AMQP, que realiza el enrutamiento, posiblemente garantiza la entrega, distribuye flujos de datos y se suscribe a los tipos de mensajes deseados.

Protocolo AMQP introduce tres conceptos:

ConejoMQ. Parte 1. Introducción. Erlang, AMQP

  • exchange (punto de intercambio o intercambio): se le envían mensajes. Punto de intercambio distribuye mensaje en una o más colas. Ella enruta mensajes a una cola basado en las conexiones creadas (binding) entre él y la cola
  • queue (cola): una estructura de datos en el disco o en la RAM que almacena enlaces a mensajes y proporciona copias de los mensajes consumers (a los consumidores)
  • binding (vinculante) - una regla que le dice al punto de intercambio en qué cola deben ir estos mensajes

El protocolo se ejecuta en la parte superior. TCP / IP.

Brevemente sobre Erlang

El código fuente del proyecto está en el repositorio en GitHub. Arquitectura Servidor RabbitMQ Residencia en Erlang y HAZ.

Erlang desarrollado por la empresa Ericsson a mediados de la década de 1980 como un sistema distribuido, tolerante a fallas y en tiempo real para aplicaciones que requerían un tiempo de actividad del 99,999%. Erlang utilizado en diversas industrias y aplicaciones modernas, p. WhatsApp. Puedes leer más en el artículo. Arquitectura de WhatsApp, que Facebook compró por 19 mil millones de dólares

Brevemente sobre RabbitMQ

RabbitMQ es un intermediario de mensajes de código abierto. Enruta mensajes siguiendo todos los principios básicos del protocolo. AMQP descrito en especificaciones. RabbitMQ implementa y complementa el protocolo AMQP.

La idea principal del modelo de mensajería en RabbitMQ cosa es producer (editor) no envía mensajes directamente a la cola. De hecho, y muy a menudo, el editor ni siquiera sabe si el mensaje se entregará en alguna cola.

En cambio, el editor sólo puede enviar mensajes al intercambio. Por un lado, el intercambio recibe mensajes de los editores y, por otro, los envía a las colas. El intercambio debe saber exactamente qué hacer con el mensaje que recibe. ¿Debería agregarse a una cola específica? ¿Debería agregarse a varias colas? O el mensaje debería ignorarse.

ConejoMQ. Parte 1. Introducción. Erlang, AMQP

Breve trabajo RabbitMQ se puede describir de la siguiente manera:

  1. El editor envía un mensaje a un intercambio específico.
  2. Una central, después de recibir un mensaje, lo enruta a una o más colas de acuerdo con las reglas vinculantes entre él y la cola.
  3. La cola almacena una referencia a este mensaje. El mensaje en sí se almacena en la RAM o en el disco.
  4. Una vez que el consumidor está listo para recibir un mensaje de la cola, el servidor crea una copia del mensaje a través del enlace y envía
  5. El consumidor recibe el mensaje y envía confirmación al corredor.
  6. El corredor, al recibir la confirmación, elimina una copia del mensaje de la cola. Luego lo elimina de la RAM y del disco.

RPC

proceso RPC (llamada a procedimiento remoto) Subyace a casi todas las interacciones con el núcleo. RabbitMQ. Por ejemplo, las discusiones iniciales sobre los términos del cliente con RabbitMQ, demuestra un cierto proceso RPC. Una vez completada esta secuencia, RabbitMQ estará listo para aceptar solicitudes del cliente:

ConejoMQ. Parte 1. Introducción. Erlang, AMQP

También en la especificación AMQP Tanto el cliente como el servidor pueden emitir comandos. Esto significa que el cliente está esperando comunicarse con el servidor. Los comandos son clases y métodos. Por ejemplo, Connection.Start – llamada al método Start clase Connection.

Conexión y canales

Para dicho intercambio de información entre cliente y servidor, canales. Los canales se crean dentro conexión específica. Cada canal está aislado de otros canales. En el caso síncrono, no es posible ejecutar el siguiente comando hasta que se reciba una respuesta.

Para poder enviar comandos en paralelo, es necesario abrir varios canales. Cada canal crea un separado Erlang proceso. Una conexión puede tener múltiples canales (multiplexación). Para cada canal hay ciertas estructuras y objetos en la memoria. Por lo tanto, cuantos más canales haya dentro de una conexión, más RabbitMQ usa más memoria para gestionar dicha conexión.

ConejoMQ. Parte 1. Introducción. Erlang, AMQP

Un ejemplo simple de cómo crear una conexión y un canal usando RabbitMQ.Cliente:

// ...
private void TryConnect()
{
    var factory = new ConnectionFactory() 
    {
        HostName = "host_name",
        UserName = "user_name",
        Password = "p@ssword",
        // Включение автоматичекого восстановления
        // соединения после сбоев сети 
        AutomaticRecoveryEnabled = true
    };
    _connection = factory.CreateConnection();
}
// ...
public void CreateChanel()
{
    _channel = _connection.CreateModel();
    // other options 
}

Se desaconseja encarecidamente abrir una nueva conexión para cada operación, ya que esto conducirá a altos costos. Los canales también deben ser persistentes, pero muchos errores de protocolo hacen que el canal se cierre, por lo que la vida útil del canal puede ser más corta que la de la conexión.

¿Dónde se utiliza RabbitMQ?

En el contexto de los microservicios, el protocolo AMQP y su implementación en RabbitMQ utilizado a menudo para interacción asincrónica entre servicios.

En contexto IIOT protocolo AMQP y su implementación en RabbitMQ Se utiliza para el intercambio de datos entre servidores (servidor-servidor). Utilice también el complemento Complemento MQTT RabbitMQ que es una implementación del protocolo MQTT para transmitir datos entre el sensor y el servidor en entornos de baja velocidad y alta latencia (encontrará una lista completa de los protocolos admitidos en sitio del proyecto).

En el próximo artículo comenzaremos a comprender los Exchanges con más detalle.

referencias

Fuente: habr.com

Añadir un comentario