RabbitMQ. Deel 1. Aféierung. Erlang, AMQP

Gudde Mëtteg, Habr! Ech wëll e Léierbuch-Referenzbuch vu Wëssen deelen, dat ech et fäerdeg bruecht hunn ze sammelen RabbitMQ a condenséieren a kuerzen Empfehlungen a Conclusiounen.

Inhaltsverzeechnes

  • RabbitMQ. Deel 1. Aféierung. Erlang, AMQP und RPC
  • RabbitMQ. Deel 2. Versteesdemech Austausch
  • RabbitMQ. Deel 3. Versteesdemech Schlaangen a Bindungen
  • RabbitMQ. Deel 4. Versteesdemech wat Messagen an Rummen sinn
  • RabbitMQ. Deel 5: Message Verëffentlechung a Konsum Leeschtung
  • RabbitMQ. Deel 6. Iwwerpréiwung vun der Federatioun an Schaufel Moduler
  • RabbitMQ. Deel 7. Detailer iwwert Connection an Chanel
  • RabbitMQ. Deel 8. RabbitMQ an .NET
  • RabbitMQ. Deel 9. Iwwerwachung

Kuerz iwwer AMQP

AMQP (Advanced Message Queuing Protocol) ass en oppene Protokoll fir Messagen tëscht Systemkomponenten ze vermëttelen. D'Basis Iddi ass datt eenzel Subsystemer (oder onofhängeg Applikatiounen) Messagen op eng arbiträr Manéier duerch en AMQP Broker austausche kënnen, deen Routing ausféiert, méiglecherweis Liwwerung garantéiert, Datenstroum verdeelt an op déi gewënschte Messagetypen abonnéiert.

Protokoll AMQP féiert dräi Konzepter vir:

RabbitMQ. Deel 1. Aféierung. Erlang, AMQP

  • exchange (Austauschpunkt oder Austausch) - Messagen ginn un et geschéckt. Austauschpunkt verdeelt Message an enger oder méi Schlaangen. Si routes Messagen op eng Schlaang baséiert op de geschafe Verbindungen (binding) tëscht him an der Schlaang
  • queue (Schlaang) - eng Daten Struktur op Scheif oder am RAM datt späichert Linken op Messagen a gëtt Kopie vu Messagen consumers (zu Konsumenten)
  • binding (verbindlech) - eng Regel déi seet den Austauschpunkt an an wéi eng Schlaang dës Messagen solle goen

De Protokoll leeft uewen TCP / IP.

Kuerz iwwer Erlang

De Quellcode vum Projet ass am Repository op GitHub. Architektur RabbitMQ-Server baséiert op erlang an BEAM.

Erlang vun der Firma entwéckelt Ericsson an der Mëtt vun den 1980er Joren als verdeelt, Feelertolerant, Echtzäitsystem fir Uwendungen déi 99,999% uptime erfuerderen. Erlang a verschiddenen Industrien a modernen Uwendungen benotzt, z.B. WhatsApp. Dir kënnt méi am Artikel liesen WhatsApp Architektur, déi Facebook fir 19 Milliarden Dollar kaaft huet

Kuerz iwwer RabbitMQ

Kanéngchen MQ ass en Open Source Message Broker. Et routes Messagen laanscht all Grondprinzipien vum Protokoll AMQP beschriwwen an Spezifikatioune. RabbitMQ implementéiert an ergänzt de Protokoll AMQP.

D'Haaptidee vum Messagerie Modell an RabbitMQ Saach ass producer (Verlag) schéckt keng Messagen direkt an d'Schlaang. Tatsächlech, a ganz dacks, weess de Verlag net emol ob de Message iwwerhaapt an eng Schlaang geliwwert gëtt.

Amplaz kann de Verlag nëmmen Messagen un den Austausch schécken. Engersäits kritt den Austausch Messagen vu Verëffentlechen, an op der anerer Säit schéckt se se an d'Schlaangen. Den Austausch muss genau wësse wat mat der Noriicht ze maachen ass, déi se kritt. Soll et an eng spezifesch Schlaang bäigefüügt ginn? Sollt et op verschidde Schlaangen bäigefüügt ginn? Oder de Message soll ignoréiert ginn.

RabbitMQ. Deel 1. Aféierung. Erlang, AMQP

Kuerz Aarbecht RabbitMQ kann wéi follegt beschriwwe ginn:

  1. De Verlag schéckt e Message un e spezifeschen Austausch
  2. En Austausch, deen e Message kritt huet, féiert se op eng oder méi Schlaangen am Aklang mat de verbindleche Reegele tëscht him an der Schlaang
  3. D'Schlaang späichert eng Referenz op dëse Message. De Message selwer gëtt am RAM oder op der Disk gespäichert
  4. Wann de Konsument bereet ass e Message aus der Schlaang ze kréien, erstellt de Server eng Kopie vun der Noriicht iwwer de Link a schéckt
  5. De Konsument kritt de Message a schéckt d'Confirmatioun un de Broker
  6. De Broker, wann hien d'Confirmatioun kritt, läscht eng Kopie vum Message aus der Schlaang. Da geläscht aus RAM an Scheif

RPC-

Prozess RPC (Remote Procedure Call) ënnerläit bal all Interaktioune mam Kär RabbitMQ. Zum Beispill, initial Diskussiounen iwwert d'Konditioune vum Client mat RabbitMQ, weist e bestëmmte Prozess RPC. Wann dës Sequenz fäerdeg ass, RabbitMQ wäert prett sinn Ufroe vum Client ze akzeptéieren:

RabbitMQ. Deel 1. Aféierung. Erlang, AMQP

Och an der Spezifizéierung AMQP souwuel de Client wéi de Server kënnen Kommandoen ausginn. Dëst bedeit datt de Client waart fir mam Server ze kommunizéieren. Kommandoen sinn Klassen a Methoden. Zum Beispill, Connection.Start - Method Opruff Start Grad Connection.

Verbindung an Channels

Fir esou Informatiounsaustausch tëscht Client a Server, Kanäl. Channels ginn bannen erstallt spezifesch Verbindung. All Kanal ass vun anere Channels isoléiert. Am synchrone Fall ass et net méiglech den nächste Kommando auszeféieren bis eng Äntwert kritt gëtt.

Fir Parallel Kommandoen ze schécken, musst Dir verschidde Kanäl opmaachen. All Kanal schaaft eng separat Erlang Prozess. Eng Verbindung ka verschidde Kanäl hunn (multiplexéieren). Fir all Kanal ginn et bestëmmte Strukturen an Objeten an Erënnerung. Dofir, der méi Channels et bannent enger Verbindung, der RabbitMQ benotzt méi Erënnerung esou eng Verbindung ze verwalten.

RabbitMQ. Deel 1. Aféierung. Erlang, AMQP

En einfacht Beispill fir eng Verbindung a Kanal ze kreéieren benotzt 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 
}

Eng nei Verbindung fir all Operatioun opzemaachen ass staark decouragéiert wéi dëst wäert zu héije Käschte féieren. Channels sollen och persistent sinn, awer vill Protokollfehler verursaachen de Kanal zou, sou datt d'Liewensdauer vum Kanal méi kuerz ass wéi déi vun der Verbindung.

Wou gëtt RabbitMQ benotzt?

Am Kontext vu Mikroservicer, de Protokoll AMQP an hir Ëmsetzung an RabbitMQ oft benotzt fir asynchrone Interaktioun tëscht Servicer.

Am Kontext IIOT Protokoll AMQP an hir Ëmsetzung an RabbitMQ benotzt fir Datenaustausch tëscht Serveren (Server-Server). Benotzt och de Plugin MQTT Plugin RabbitMQ wat eng Ëmsetzung vum Protokoll ass MQTT fir d'Transmissioun vun Daten tëscht Sensor a Server a Low-Speed, High-latency Ëmfeld (eng komplett Lëscht vun ënnerstëtzte Protokoller ass op Projet Websäit).

Am nächsten Artikel wäerte mir ufänken Austausch méi am Detail ze verstoen.

Referenze

Source: will.com

Setzt e Commentaire