CoelloMQ. Parte 1. Introdución. Erlang, AMQP

Boas tardes, Habr! Quero compartir un libro de texto-libro de coñecemento de referencia que conseguín recoller RabbitMQ e condensar en recomendacións e conclusións breves.

Índice analítico

  • CoelloMQ. Parte 1. Introdución. Erlang, AMQP e RPC
  • CoelloMQ. Parte 2. Comprensión dos intercambios
  • CoelloMQ. Parte 3. Comprensión de colas e enlaces
  • CoelloMQ. Parte 4. Comprender o que son as mensaxes e os marcos
  • CoelloMQ. Parte 5: Publicación de mensaxes e rendemento do consumo
  • CoelloMQ. Parte 6. Revisión dos módulos Federación e Pala
  • CoelloMQ. Parte 7. Detalles sobre Connection e Chanel
  • CoelloMQ. Parte 8. RabbitMQ en .NET
  • CoelloMQ. Parte 9. Seguimento

Brevemente sobre AMQP

AMQP (Advanced Message Queuing Protocol) é un protocolo aberto para transmitir mensaxes entre compoñentes do sistema. A idea básica é que os subsistemas individuais (ou aplicacións independentes) poden intercambiar mensaxes de forma arbitraria a través dun intermediario AMQP, que realiza o enrutamento, posiblemente garante a entrega, distribúe fluxos de datos e subscríbese aos tipos de mensaxes desexados.

Protocolo AMQP introduce tres conceptos:

CoelloMQ. Parte 1. Introdución. Erlang, AMQP

  • exchange (punto de intercambio ou intercambio) - envíanse mensaxes a el. Punto de intercambio distribúe a mensaxe nunha ou varias filas. Ela encamiña as mensaxes a unha cola en función das conexións creadas (binding) entre el e a cola
  • queue (cola) - unha estrutura de datos no disco ou na RAM que almacena ligazóns a mensaxes e dá copias das mesmas consumers (aos consumidores)
  • binding (vinculante) - unha regra que indica ao punto de intercambio a que cola deben ir estas mensaxes

O protocolo corre por riba TCP / IP.

Brevemente sobre Erlang

O código fonte do proxecto está no repositorio en GitHub. Arquitectura Servidor RabbitMQ baseado en Erlang e BEAM.

Erlang desenvolvido pola empresa Ericsson a mediados da década de 1980 como un sistema distribuído, tolerante a fallos e en tempo real para aplicacións que requiren un tempo de actividade do 99,999 %. Erlang usado en diversas industrias e aplicacións modernas, p. WhatsApp. Podes ler máis no artigo Arquitectura de WhatsApp, que Facebook comprou por 19 millóns de dólares

Brevemente sobre RabbitMQ

CoelloMQ é un corredor de mensaxes de código aberto. Dirixe as mensaxes ao longo de todos os principios básicos do protocolo AMQP descrito en especificacións. RabbitMQ implementa e complementa o protocolo AMQP.

A idea principal do modelo de mensaxería en RabbitMQ a cousa é producer (editor) non envía mensaxes directamente á cola. De feito, e con bastante frecuencia, o editor nin sequera sabe se a mensaxe será entregada a algunha cola.

Pola contra, o editor só pode enviar mensaxes ao intercambio. Por unha banda, o intercambio recibe mensaxes das editoriais e, por outra banda, envíaas ás filas. O intercambio debe saber exactamente que facer coa mensaxe que recibe. Debería engadirse a unha cola específica? Debería engadirse a varias filas? Ou a mensaxe debe ignorarse.

CoelloMQ. Parte 1. Introdución. Erlang, AMQP

Breve traballo RabbitMQ pódese describir do seguinte xeito:

  1. O editor envía unha mensaxe a un intercambio específico
  2. Un intercambio, despois de recibir unha mensaxe, envíaa a unha ou máis filas de acordo coas regras vinculantes entre el e a cola.
  3. A cola almacena unha referencia a esta mensaxe. A mensaxe en si gárdase na memoria RAM ou no disco
  4. Unha vez que o consumidor está preparado para recibir unha mensaxe da cola, o servidor crea unha copia da mensaxe a través da ligazón e envía
  5. O consumidor recibe a mensaxe e envía a confirmación ao corredor
  6. O corredor, ao recibir a confirmación, elimina unha copia da mensaxe da cola. A continuación, elimínase da memoria RAM e do disco

CPR

proceso RPC (chamada de procedemento remoto) subxace en case todas as interaccións co núcleo RabbitMQ. Por exemplo, as discusións iniciais sobre as condicións do cliente RabbitMQ, demostra un determinado proceso RPC. Unha vez completada esta secuencia, RabbitMQ estará preparado para aceptar solicitudes do cliente:

CoelloMQ. Parte 1. Introdución. Erlang, AMQP

Tamén na especificación AMQP tanto o cliente como o servidor poden emitir comandos. Isto significa que o cliente está esperando para comunicarse co servidor. Os comandos son clases e métodos. Por exemplo, Connection.Start - chamada ao método Start clase Connection.

Conexión e canles

Para tal intercambio de información entre cliente e servidor, canles. As canles créanse dentro conexión específica. Cada canle está illada doutras canles. No caso sincrónico, non é posible executar o seguinte comando ata que se reciba unha resposta.

Para poder enviar comandos en paralelo, tes que abrir varias canles. Cada canle crea un separado Erlang proceso. Unha conexión pode ter varias canles (multiplexing). Para cada canle hai determinadas estruturas e obxectos na memoria. Polo tanto, cantos máis canles haxa dentro dunha conexión, máis RabbitMQ usa máis memoria para xestionar tal conexión.

CoelloMQ. Parte 1. Introdución. Erlang, AMQP

Un exemplo sinxelo de crear unha conexión e unha canle 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 
}

Desaconséllase encarecidamente abrir unha nova conexión para cada operación levará a altos custos. As canles tamén deben ser persistentes, pero moitos erros de protocolo fan que a canle se peche, polo que a vida útil da canle pode ser máis curta que a da conexión.

Onde se usa RabbitMQ?

No contexto dos microservizos, o protocolo AMQP e a súa implantación en RabbitMQ moitas veces usado para interacción asíncrona entre servizos.

No contexto IIOT protocolo AMQP e a súa implantación en RabbitMQ usado para o intercambio de datos entre servidores (servidor-servidor). Tamén use o complemento Complemento MQTT RabbitMQ que é unha implementación do protocolo MQTT para transmitir datos entre o sensor e o servidor en ambientes de baixa velocidade e alta latencia (a lista completa de protocolos compatibles está listada en sitio do proxecto).

No seguinte artigo comezaremos a comprender os intercambios con máis detalle.

referencias

Fonte: www.habr.com

Engadir un comentario