Dober dan, Habr! Rad bi delil učbenik-priročnik znanj, ki sem jih uspel zbrati o RabbitMQ in strniti v kratke priporočila in zaključke.
Taula de continguts
- RabbitMQ. Del 1. Introducció. Erlang, AMQP i RPC
- RabbitMQ. Del 2. Lletra amb Exchanges
- RabbitMQ. Del 3. Lletra amb Queues i Bindings
- RabbitMQ. Del 4. Poglobimo se v to, kaj so sporočila in okviri
- RabbitMQ. Del 5. Rendiment de la publicació i consum de missatges
- RabbitMQ. Del 6. Visió general dels mòduls Federation i Shovel
- RabbitMQ. Del 7. Detalls sobre la connexió i el canal
- RabbitMQ. Del 8. RabbitMQ en .NET
- RabbitMQ. Del 9. Monitoratge
Kratka razlaga AMQP
AMQP (Advanced Message Queuing Protocol) je odprti protokol za prenos sporočil med komponentami sistema. Osnovna ideja je, da si lahko posamezni pod sistemi (ali neodvisne aplikacije) izmenjujejo sporočila na poljuben način preko AMQP-posrednika, ki opravlja usmerjanje, morebiti zagotavlja dostavo, porazdelitev podatkovnih tokov ter naročanje na potrebne tipe sporočil.
Protokol AMQP uvaja tri pojme:

— ime izmenjevalnika(izmenjevalna točka ali izmenjava) - v to se pošiljajo sporočila. Izmenjevalna točka porazdeli sporočilo v eno ali več čakalnih vrst. Ona usmerja sporočila v čakalno vrsto na podlagi ustvarjenih povezav (binding) med njo in čakalno vrstovrsta(čakalna vrsta) - podatkovna struktura na disku ali v pomnilniku, ki hrani povezave na sporočila in daje kopije sporočilconsumidors(potrošnikom)binding(povezava) - pravilo, ki sporoča izmenjevalni točki, v katero čakalno vrsto morajo ta sporočila priti
Protokol deluje nad .
Kratka razlaga Erlang
Izvorna koda projekta se nahaja v repozitoriju na . Arhitektura temelji na in BEAM.
Erlangrazvil je podjetjeEricssonv sredini 1980-ih kot porazdeljen, odpornoten sistem v realnem času za aplikacije, ki zahtevajo brezokvarno delovanje 99,999%.Erlangse uporablja v različnih panogah in sodobnih aplikacijah, na primer v
Kratka razlaga RabbitMQ
je posrednik sporočil z odprtim izvorom. Usmerja sporočila po vseh osnovnih načelih protokola opisanih v . RabbitMQ izvaja in dopolnjuje protokol AMQP.
Osnovna ideja modela izmenjave sporočil v RabbitMQ je, da producer (izdajatelj) ne pošilja sporočil neposredno v čakalno vrsto. V bistvu in precej pogosto izdajatelj celo ne ve, ali bo sporočilo sploh dostavljeno v katero koli čakalno vrsto.
Namesto tega lahko izdajatelj pošilja sporočila le na izmenjavo. Na eni strani izmenjava prejme sporočila od izdajateljev, na drugi pa jih pošilja v vrste. Izmenjava mora natančno vedeti, kaj storiti s prejetim sporočilom. Ali naj se doda določenemu vrsti? Ali naj se doda več vrstam? Ali je sporočilo treba prezreti?

Delo lahko na kratko opišemo takole: RabbitMQ можно описать следующим образом:
- Izdajatelj pošlje sporočilo določeni izmenjavi
- Izmenjava, ko prejme sporočilo, usmeri to v eno ali več vrst v skladu s pravili vezave med njo in vrsto
- Vrsta hrani povezavo na to sporočilo. Samo sporočilo je shranjeno v pomnilniku ali na disku
- Ko je porabnik pripravljen prejeti sporočilo iz vrste, strežnik ustvari kopijo sporočila na povezavi in ga pošlje
- Porabnik prejme sporočilo in pošlje potrditev posredniku
- Posrednik, ko prejme potrditev, odstrani kopijo sporočila iz vrste. Nato jo odstrani iz RAM-a in z diska
RPC
Postopek je osnova praktično vseh interakcij z jedrom RabbitMQ. Na primer, prvotna razprava o pogojih stranke z RabbitMQ, prikazuje določen proces RPC. Ko se ta zaporedje zaključi, RabbitMQ bo pripravljen sprejemati zahteve od stranke:

Prav tako v specifikaciji AMQP lahko tako stranka kot strežnik kličeta ukaze. To pomeni, da stranka pričakuje interakcijo s strežnikom. Ukazi so razredi in metode. Na primer, Connection.Start – klic metode Začni klasa Povezava.
Povezava in kanali
Za takšno izmenjavo informacij med stranko in strežnikom se uporabljajo kanali. Kanali so ustvarjeni v okviru določenega povezovanja. Vsak kanal je izoliran od drugih kanalov. V sinhronem primeru ni mogoče izvesti naslednjega ukaza, dokler ne prejmete odgovora.
Da bi lahko hkrati pošiljali ukaze, je treba odpreti več kanalov. Vsak kanal ustvari ločen Erlang postopek. Ena povezava lahko ima več kanalov (). Za vsak kanal obstajajo določene strukture in objekti v pomnilniku. Zato več kot je kanalov v okviru povezave, več pomnilnika uporablja RabbitMQ za upravljanje te povezave.

Preprost primer ustvarjanja povezave in kanala s pomočjo :
// ...
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
}Odprtje nove povezave za vsako operacijo se strogo ne priporoča, saj to privede do velikih stroškov. Kanali morajo biti prav tako stalni, vendar številne napake protokola povzročajo zaprtje kanala, zato je lahko življenjska doba kanala krajša od življenjske dobe povezave.
Kje se uporablja RabbitMQ?
V kontekstu mikroservisov se protokol AMQP in njegova realizacija v RabbitMQ pogosto uporabljata za asinhrono interakcijo med storitvami.
V kontekstu IIOT protokol AMQP in njegova realizacija v RabbitMQ se uporablja za izmenjavo podatkov med strežniki (strežnik-strežnik). Prav tako se uporablja vtičnik ki je realizacija protokola za prenos podatkov med senzorjem in strežnikom v nizkodočnih okoljih z visokimi zakasnitvami (popoln seznam podprtih protokolov je naveden na ).
V naslednjem članku se bomo podrobneje lotili Exchanges.
Povezave
Izvor: habr.com
