RabbitMQ. Parte 1. Introduzione. Erlang, AMQP

Bona sera, Habr ! Vogliu sparte un libru di testu di cunniscenza di riferimentu chì aghju sappiutu à cullà RabbitMQ è condensate in brevi raccomandazioni è cunclusioni.

Indice di cuntenutu

  • RabbitMQ. Parte 1. Introduzione. Erlang, AMQP è RPC
  • RabbitMQ. Part 2. Cumprendi i scambii
  • RabbitMQ. Part 3. Capisce i Queues è Bindings
  • RabbitMQ. Part 4. Capisce ciò chì i missaghji è frames sò
  • RabbitMQ. Part 5: Publishing and Consuming Message Performance
  • RabbitMQ. Part 6. Overview of the Federation and Shovel Modules
  • RabbitMQ. Part 7. Details about Connection and Chanel
  • RabbitMQ. Part 8. RabbitMQ in .NET
  • RabbitMQ. Part 9. Monitoring

Brevemente nantu à AMQP

AMQP (Advanced Message Queuing Protocol) hè un protokollu apertu per passà missaghji trà cumpunenti di u sistema. L'idea principale hè chì i sottosistemi separati (o appiicazioni indipendenti) ponu scambià missaghji arbitrariamente per mezu di un broker AMQP chì eseguisce routing, possibbilmente guarantisci a consegna, distribuzione di flussi di dati, abbunamentu à i tipi di messagi desiderati.

Prutucollu AMQP introduce trè cuncetti:

RabbitMQ. Parte 1. Introduzione. Erlang, AMQP

  • exchange (puntu di scambiu o scambiu) - i missaghji sò mandati. puntu di scambiu distribuisce u messagiu in una o più file. Ella indirizza i missaghji à una fila basatu annantu à i ligami creati (binding) trà ellu è a fila
  • queue (queue) - una struttura di dati in discu o in RAM, chì magazzini ligami à missaghji è dà copie di missaghji consumers (à i cunsumatori)
  • binding (ligatu) - una regula chì dici à u puntu di scambiu in quale di e fila issi messagi anu da cascà

U protokollu curreghja TCP / IP.

Brevemente nantu à Erlang

U codice fonte di u prughjettu si trova in u repository à GitHub. Architettura rabbitmq-server bastu nantu à erlang è BEAM.

Erlang sviluppatu da a cumpagnia Ericsson in a mità di l'anni 1980 cum'è un sistema distribuitu, tolerante à i difetti, in tempu reale per l'applicazioni chì necessitanu 99,999% uptime. Erlang utilizatu in diverse industrii è applicazioni muderni, per esempiu in WhatsApp. Pudete leghje più in l'articulu L'architettura WhatsApp, chì Facebook hà compru per $ 19 miliardi

In breve nantu à RabbitMQ

Rabbit MQ hè un broker di missaghju open source. It routes missaghji secondu à tutti i principii basi di u protocolu AMQP descrittu in quaternu. RabbitMQ implementa è cumplementa u protocolu AMQP.

L'idea di basa di u mudellu di messageria in RabbitMQ a cosa hè producer (editore) ùn manda micca missaghji direttamente à a fila. In fatti, è abbastanza spessu, l'editore ùn sà mancu se u messagiu serà mandatu in ogni fila.

Invece, l'editore pò solu mandà missaghji à u scambiu. Da una banda, u scambiu riceve missaghji da l'editori, è da l'altra banda, li manda à a fila. U scambiu deve sapè esattamente ciò chì fà cù u missaghju ricevutu. Deve esse aghjuntu à una fila specifica? Si deve esse aghjuntu à parechje file? O u missaghju deve esse ignoratu.

RabbitMQ. Parte 1. Introduzione. Erlang, AMQP

Breve travagliu RabbitMQ pò esse discrittu cusì:

  1. L'editore manda un missaghju à un scambiu specificu
  2. U scambiu, dopu avè ricevutu un missaghju, l'indirizza à una o più file in cunfurmità cù e regule vincolanti trà ellu è a fila.
  3. A fila guarda un ligame à stu messagiu. U missaghju stessu hè guardatu in RAM o in discu
  4. Appena u cunsumadore hè prontu à riceve un missaghju da a fila, u servitore crea una copia di u messagiu per riferimentu è manda
  5. U cunsumadore riceve u messagiu è manda un ricunniscenza à u broker
  6. U broker, dopu avè ricevutu cunferma, sguassate una copia di u messagiu da a fila. Allora sguassate da a RAM è da u discu

RPC

prucessu RPC (chiamata di procedura remota) sott'à quasi tutte l'interazzione cù u nucleu RabbitMQ. Per esempiu, discussioni iniziali di i termini di u cliente cù RabbitMQ, mostra un certu prucessu RPC. Quandu sta sequenza hè cumpleta, RabbitMQ serà prontu à accettà richieste da u cliente:

RabbitMQ. Parte 1. Introduzione. Erlang, AMQP

Ancu in specificazioni AMQP u cliente è u servitore ponu emette cumandamenti. Questu significa chì u cliente aspetta per interagisce cù u servitore. I cumandamenti sò classi è metudi. Per esempiu, Connection.Start - metudu chjama Start класса Connection.

Cunnessione è canali

Per stu scambiu di informazioni trà u cliente è u servitore, canali. I canali sò creati in l'internu cunnessione specifica. Ogni canali hè isolatu da altri canali. In u casu sincronu, ùn hè micca pussibule di eseguisce u prossimu cumandamentu finu à chì una risposta hè ricevutu.

Per pudè mandà cumandamenti in parallelu, avete da apre parechji canali. Ogni canale crea un separatu Erlang prucessu. Una cunnessione pò avè parechje canali (multiplexing). Per ogni canali, ci sò certe strutture è oggetti in memoria. Dunque, più canali sò in una cunnessione, u più più memoria hè utilizata da RabbitMQ per gestisce una tale cunnessione.

RabbitMQ. Parte 1. Introduzione. Erlang, AMQP

Un esempiu simplice di creà una cunnessione è un canale utilizendu RabbitMQ.Client:

// ...
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 
}

Apertura di una nova cunnessione per ogni operazione hè fortemente sconsigliata porta à altu costu. I canali anu ancu esse persistenti, ma assai errori di protokollu causanu u canali per chjude, cusì a vita di un canale pò esse più corta di quella di una cunnessione.

Induve si usa RabbitMQ?

In u cuntestu di i microservizi, u protocolu AMQP è a so implementazione in RabbitMQ spessu usatu per interazione asincrona trà servizii.

In u cuntestu IIOT protocolu AMQP è a so implementazione in RabbitMQ utilizatu per u scambiu di dati trà i servitori (server-server). Utilizendu ancu u plugin MQTT Plugin RabbitMQ chì hè una implementazione di u protocolu MQTT per u trasferimentu di dati trà un sensoru è un servitore in ambienti à bassa velocità è alta latenza (per una lista completa di protokolli supportati, vede situ web di u prugettu).

In u prossimu articulu, avemu da principià à capisce in più dettu cù Scambi.

referenze

Source: www.habr.com

Add a comment