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:
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 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.
Kuerz Aarbecht RabbitMQ kann wéi follegt beschriwwe ginn:
De Verlag schéckt e Message un e spezifeschen Austausch
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
D'Schlaang späichert eng Referenz op dëse Message. De Message selwer gëtt am RAM oder op der Disk gespäichert
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
De Konsument kritt de Message a schéckt d'Confirmatioun un de Broker
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:
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.
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.