RabbitMQ explicat în 5 minute sau mai puțin

Vom vedea astăzi cum să grăbiți timpul de încărcare a paginilor dvs. executând cea mai grea procesare asincron, totul gestionat foarte simplu, datorită RabbitMQ.

Stabilitatea și viteza unei aplicații sau a unui site web sunt cu siguranță printre cei mai importanți factori pentru utilizatori. Cine nu a părăsit niciodată un site înainte de a vedea prima pagină pentru că a durat prea mult?

Ce este RabbitMQ

RabbitMQ este un broker de mesagerie open-source, distribuit și scalabil, care servește ca intermediar pentru comunicarea eficientă între producători și consumatori.

RabbitMQ implementează protocolul de mesagerie la nivel de aplicație AMQP, care se concentrează pe comunicarea mesajelor asincrone cu garanție de livrare prin confirmări de primire a mesajelor de la broker către producător și de la consumatori către producător.

Cum funcționează RabbitHQ

Într-un mod simplificat, RabbitMQ definește cozi care vor stoca mesajele trimise de producători până când aplicațiile consumatoare primesc mesajul și îl procesează. Ne permite să proiectăm și să implementăm sisteme distribuite, în care un sistem este împărțit în module independente care comunică între ele prin mesaje.

Ca orice comunicare, avem nevoie de un producător, un mesaj și un receptor. În mijlocul tortului se află RabbitMQ, care ar fi locul unde mesajul așteaptă receptorul.

Să înțelegem mai bine cum funcționează, cunoscând tipurile de schimburi care reprezintă schimbul de mesaje.

Tipuri de schimb

Prin schimburi, ori de câte ori trimitem un mesaj prin RabbitMQ, nu îl trimitem direct la o coadă; pentru ca alte sisteme să-l citească, îl trimitem la o centrală, care este responsabilă de transmiterea mesajelor către diferite cozi.

Credit imagine: CloudAQMP

Tipurile de schimburi sunt Direct, Fanout, Topic și Readers.

Schimb direct

Să presupunem că un producător trebuie să emită un mesaj de confirmare a achiziției către trei consumatori. Adică, sistemul trebuie să comunice cu alte trei sisteme diferite pentru a face achiziția.

Deoarece RabbitMQ trimite mesajul separat la fiecare coadă, există un impuls pentru ca aceste alte sisteme să primească mesajul direct.

  Cum să documentați codul JavaScript folosind JSDoc

În mod normal, schimbul înaintează mesajul către cozi, dar adesea nu vrem ca mesajele noastre să fie trimise la toate cozile. Prin urmare, există mai multe condiții pe care le putem aplica pentru a face un schimb să funcționeze.

Astfel, puteți trimite mesajul dvs. unui singur consumator; în loc să fie trimise tuturor.

Cheie de legare: Pentru a conecta o coadă la un schimb, trebuie să creați o legătură, o relație între o coadă și un schimb, ca un conector.

Cheie de rutare: În această legătură, putem crea, de asemenea, un element numit cheie de rutare, care, cu alte cuvinte, este o cheie pentru redirecționarea mesajelor noastre către o anumită coadă.

Dacă aveți o cheie de rutare X, o cheie de rutare Y și o cheie de rutare Z, mesajul cu cheia de rutare Y, de exemplu, va trece prin coada Y și va fi livrat direct consumatorului pe care l-ați definit pentru a primi mesajul.

Astfel, putem avea mai multe cozi conectate la o centrală, dar, în același timp, pot avea și relații diferite cu schimburile folosind cheile de rutare.

Schimb de fanout

Când mesajul este trimis la schimb, acesta este trimis la toate cozile conectate la acesta. Deci, dacă aveți 10 cozi conectate la un schimb de fanout, toate cozile vor primi mesajul care a fost trimis.

Schimb de subiecte

Este unul dintre cele mai flexibile schimburi, permițându-ne să trimitem mesaje în funcție de subiect. Și pe baza modului în care denumiți cheile de rutare, este posibil să creați modele de reguli și relații între sisteme.

De exemplu: cheie de rutare (x.*); cheie de rutare(*.z); cheie de rutare (*.y.*).

Ce este AQMP în RabbitMQ

AMQP (Advanced Message Queuing Protocol) este un protocol de mesagerie deschis utilizat pentru a defini transportul mesajelor între mai multe aplicații. Este similar cu protocoalele HTTP și TCP prin faptul că este un protocol la nivel de fir, cu excepția faptului că permite transportul asincron.

RabbitMQ a ales să implementeze AMQP din mai multe motive. Primul este că acest protocol este descris ca un standard pentru middleware, spre deosebire de JMS, care definește un API.

Un consorțiu internațional, care include companii mari precum Red Hat, Cisco Systems și Microsoft, a scris această specificație AMQP. Al doilea este interoperabilitatea acestui protocol, care permite oricărei aplicații care implementează AMQP să comunice cu un broker AMQP.

  Cum să inserați o imagine sau alt obiect în Microsoft Office

AMQP nu este singurul protocol folosit de RabbitMQ. Imaginea de mai jos reprezintă toate protocoalele, limbile și API-urile implementate și/sau acceptate de RabbitMQ.

Cele mai bune caracteristici ale RabbitMQ

Pe lângă faptul că permite integrarea diferitelor aplicații prin mesaje asincron și din locații diferite, RabbitMQ ne oferă și alte caracteristici care l-au făcut foarte popular în lumea brokerilor de mesagerie:

Stocare de încredere

RabbitMQ încorporează mai multe caracteristici care îi permit să garanteze livrarea mesajelor. Printre acestea, oferă stocare atunci când niciun consumator nu poate primi mesajul. Permite consumatorilor să accepte livrarea mesajului pentru a se asigura că acesta a fost procesat cu succes.

În cazul în care procesarea eșuează, RabbitMQ permite ca mesajul să fie repus în coadă pentru a fi consumat de o altă instanță a consumatorului sau să fie procesat din nou de același consumator care a eșuat inițial când își revine.

RabbitMQ garanteaza si ordinea de livrare a mesajelor; adică sunt consumate în aceeași ordine în care au ajuns în cozile RabbitMQ.

Crearea de clustere

Deși RabbitMQ oferă performanțe excelente prin procesarea a mii de mesaje pe secundă, uneori trebuie să poată procesa un număr mai mare de mesaje fără a afecta performanța aplicației.

Pentru aceasta, RabbitMQ permite crearea de clustere pentru a scala soluția pe orizontală, ceea ce este transparent atât pentru producători, cât și pentru consumatori.

Cozi foarte disponibile

În RabbitMQ, cozile pot fi replicate pe mai multe noduri dintr-un cluster, asigurându-se că, în cazul unei defecțiuni a nodului sau a unui timp de nefuncționare, brokerul poate continua să primească mesaje de la producători și să le livreze consumatorilor corespunzători.

Dirijare flexibilă

În RabbitMQ, pot fi definite reguli de rutare flexibile, chiar urmând un anumit tipar, pentru a direcționa mesajele între schimburi și cozi, prin legături.

Suport pentru mai multe protocoale

Pe lângă faptul că acceptă protocolul AMQP, RabbitMQ acceptă STOMP, MQTT și HTTP prin pluginuri. De asemenea, include mecanisme de autentificare și control al accesului pentru componentele fiecărui broker.

Cazuri de utilizare în viața reală a RabbitMQ

Cele mai importante cazuri de utilizare ale RabbitMQ fac posibilă garantarea asincronității între aplicații, reducerea cuplării dintre aplicații, distribuirea alertelor și controlul cozii de joburi în fundal.

Cu toate acestea, cazurile practice de utilizare ale RabbitMQ sunt în comerțul electronic, unde t este folosit pentru a manipula, procesa și transmite comenzile dvs. de vânzare către sisteme din alte sectoare, cum ar fi distribuția și emiterea de facturi.

  Cum să vă protejați dispozitivele în timpul căldurii extreme

La procesarea comenzilor, puteți redirecționa mesajul dvs. de vânzări către centrul de distribuție și o zonă de facturare. În această schemă, totul funcționează pe orizontală, urmând modelul asincron pentru trimiterea de mesaje, dar este adesea posibil să trimiteți o acțiune la mai multe cozi.

Urmând exemplul anterior, această funcție poate fi foarte utilă atunci când clientul face o achiziție și produsul trebuie pregătit pentru distribuție, transport și facturi.

Și, deoarece fiecare dintre aceste sectoare este un sistem diferit, scopul RabbitMQ este de a transmite toate aceste mesaje către sistemele corespunzătoare.

Alternative la Rabbit MQ:

RabbitMQ este mult mai simplu decât pare și există mai multe alternative la acesta, care includ:

#1. IronMQ

IronMQ este un software de așteptare a mesajelor super-rapid. Este foarte disponibil, durabil în design și, de preferință, pentru o livrare unică. IronMQ este cea mai puternică soluție nativă în cloud pentru arhitectura modernă a aplicațiilor.

Acceptă cozi push, cozi pull și sondaje lungi, ceea ce menține cererile de sondaj deschise mai mult timp. În plus, poate folosi mai multe centre de date de înaltă disponibilitate, ceea ce facilitează scalabilitatea.

Puteți implementa în cloud, pe hardware partajat sau dedicat sau on-premise. De asemenea, are o serie de biblioteci client cu documentație ușor de citit.

#2. Apache Kafka

Kafka este o platformă cu o prezență puternică în fluxul de evenimente distribuite. În esență, Kafka este conceput ca un jurnal de comitere replicat, distribuit și persistent.

Cea mai mare utilizare a acestuia este pentru microservicii de putere bazate pe evenimente sau pentru aplicațiile de procesare a fluxurilor pe scară largă, replicând automat evenimentele în mod asincron în cluster, la toleranță la erori și la o disponibilitate ridicată.

#3. Apache ActiveMQ

ActiveMQ este un broker de mesaje multiprotocol bazat pe Java. Cu acesta, putem integra aplicații folosind protocolul de așteptare a mesajelor AMQP la nivelul aplicației.

Implementează mai multe protocoale pentru integrare, precum JMS (Java nativ) și Stomp (care pot fi folosite de aplicațiile PHP), printre altele.

În plus, Amazon are versiunea sa „gestionată” numită Amazon MQ, ceea ce face mult mai ușoară utilizarea serviciului.

Cuvinte finale

Brokerii de mesagerie au fost în mod tradițional o piesă importantă în arhitecturile organizațiilor. Cu toate acestea, odată cu creșterea numărului de utilizatori care intră în sistemele companiei prin diferite canale, sunt necesare produse care să le permită scalarea orizontală la un cost scăzut. Permițând procesarea unui număr mare de mesaje pe secundă.

Aici o nouă generație de brokeri, precum RabbitMQ, devin din ce în ce mai relevanți în aplicațiile moderne, care încearcă să ofere clienților noștri niveluri ridicate de disponibilitate, fiabilitate, interoperabilitate și performanță.

De asemenea, puteți explora câteva platforme de găzduire RabbitMQ de încredere pentru aplicația dvs.