RabbitMQ. Diel 1. Ynlieding. Erlang, AMQP

Goeiemiddei, Habr! Ik wol in learboek-referinsjeboek fan kennis diele wêrop ik slagge om te sammeljen RabbitMQ en kondinsearje yn koarte oanbefellings en konklúzjes.

Ynhâldsopjefte

  • RabbitMQ. Diel 1. Ynlieding. Erlang, AMQP en RPC
  • RabbitMQ. Diel 2. Understanding Exchanges
  • RabbitMQ. Diel 3. Ferstean wachtrijen en bindingen
  • RabbitMQ. Diel 4. Begryp wat berjochten en frames binne
  • RabbitMQ. Diel 5: Publisearjen en konsumearje berjochtprestaasjes
  • RabbitMQ. Diel 6. Oersjoch fan de Federaasje en Shovel Modules
  • RabbitMQ. Diel 7. Details oer Ferbining en Chanel
  • RabbitMQ. Diel 8. RabbitMQ yn .NET
  • RabbitMQ. Diel 9. Monitoring

Koart oer AMQP

AMQP (Advanced Message Queuing Protocol) is in iepen protokol foar it ferstjoeren fan berjochten tusken systeemkomponinten. It basisidee is dat yndividuele subsystemen (as selsstannige applikaasjes) berjochten op in willekeurige manier útwikselje kinne fia in AMQP-makelaar, dy't routing útfiert, mooglik levering garandearret, datastreamen ferspriedt en abonnearret op de winske berjochttypen.

Protokol AMQP yntrodusearret trije begripen:

RabbitMQ. Diel 1. Ynlieding. Erlang, AMQP

  • exchange (wikselpunt of útwikseling) - berjochten wurde stjoerd nei it. Wisselpunt ferspraat it berjocht yn ien of mear wachtrigen. Sy stjoert berjochten nei in wachtrige basearre op oanmakke keppelings (binding) tusken him en de wachtrige
  • queue (wachtrige) - in gegevens struktuer op skiif of yn RAM dat bewarret keppelings nei berjochten en jout kopyen fan berjochten consumers (oan konsuminten)
  • binding (binend) - in regel dy't fertelt it útwikselpunt yn hokker wachtrige dizze berjochten moatte gean

It protokol rint boppe TCP / IP.

Koart oer Erlang

De boarnekoade fan it projekt is yn it repository by GitHub. Boukunde RabbitMQ-tsjinner basearre op erlang en BEAM.

Erlang ûntwikkele troch it bedriuw Ericsson yn 'e midden fan' e jierren '1980 as in ferspraat, fouttolerant, real-time systeem foar applikaasjes dy't 99,999% uptime nedich binne. Erlang brûkt yn ferskate yndustry en moderne tapassingen, f.eks. WhatsApp. Jo kinne mear lêze yn it artikel WhatsApp-arsjitektuer, dy't Facebook kocht foar $ 19 miljard

Koart oer RabbitMQ

Konyn MQ is in iepen boarne berjochtmakelaar. It rûtes berjochten lâns alle basisprinsipes fan it protokol AMQP beskreaun yn spesifikaasjes. RabbitMQ ymplemintearret en oanfolling it protokol AMQP.

It haadidee fan it messagingmodel yn RabbitMQ ding is producer (útjouwer) stjoert gjin berjochten direkt nei de wachtrige. Yn feite, en frij faak, de útjouwer wit net iens oft it berjocht sil wurde levere oan alle wachtrige.

Ynstee dêrfan kin de útjouwer allinich berjochten stjoere nei de útwikseling. Oan 'e iene kant ûntfangt de útwikseling berjochten fan útjouwers, en oan' e oare kant stjoert it se nei wachtrige. De útwikseling moat krekt witte wat te dwaan mei it berjocht dat it krijt. Moat it tafoege wurde oan in spesifike wachtrige? Moat it tafoege wurde oan meardere wachtrigen? Of it berjocht moat wurde negearre.

RabbitMQ. Diel 1. Ynlieding. Erlang, AMQP

Koarte wurk RabbitMQ kin as folget beskreaun wurde:

  1. De útjouwer stjoert in berjocht nei in spesifike útwikseling
  2. In útwikseling, nei't in berjocht ûntfongen is, stjoert it nei ien of mear wachtrigen yn oerienstimming mei de binende regels tusken har en de wachtrige
  3. De wachtrige bewarret in ferwizing nei dit berjocht. It berjocht sels wurdt opslein yn RAM of op skiif
  4. As de konsumint ree is om in berjocht út 'e wachtrige te ûntfangen, makket de tsjinner in kopy fan it berjocht fia de keppeling en stjoert
  5. De konsumint ûntfangt it berjocht en stjoert befêstiging nei de makelder
  6. De makelder, by ûntfangst fan befêstiging, ferwideret in kopy fan it berjocht út 'e wachtrige. Dan wisket út RAM en skiif

CPR

proses RPC (oprop op ôfstân) leit oan hast alle ynteraksjes mei de kearn RabbitMQ. Bygelyks, earste diskusjes oer de betingsten fan de klant mei RabbitMQ, toant in bepaald proses RPC. Sadree't dizze folchoarder is foltôge, RabbitMQ sil ree wêze om oanfragen fan 'e kliïnt te akseptearjen:

RabbitMQ. Diel 1. Ynlieding. Erlang, AMQP

Ek yn 'e spesifikaasje AMQP sawol de client as de tsjinner kinne kommando's útjaan. Dit betsjut dat de kliïnt wachtet om te kommunisearjen mei de tsjinner. Kommando's binne klassen en metoaden. Bygelyks, Connection.Start - metoade oprop Start klasse Connection.

Ferbining en kanalen

Foar sokke ynformaasje-útwikseling tusken kliïnt en tsjinner, kanalen. Kanalen wurde makke binnen spesifike ferbining. Elk kanaal is isolearre fan oare kanalen. Yn it syngroane gefal is it net mooglik om it folgjende kommando út te fieren oant in antwurd ûntfongen is.

Om kommando's parallel te stjoeren, moatte jo ferskate kanalen iepenje. Elk kanaal makket in aparte Erlang proses. Ien ferbining kin meardere kanalen hawwe (multiplexing). Foar elk kanaal binne d'r bepaalde struktueren en objekten yn it ûnthâld. Dêrom, de mear kanalen binne der binnen in ferbining, de RabbitMQ brûkt mear ûnthâld om sa'n ferbining te behearjen.

RabbitMQ. Diel 1. Ynlieding. Erlang, AMQP

In ienfâldich foarbyld fan it meitsjen fan in ferbining en kanaal mei help 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 
}

It iepenjen fan in nije ferbining foar elke operaasje wurdt sterk ûntmoedige as dit sil liede ta hege kosten. Kanalen moatte ek persistint wêze, mar in protte protokolflaters feroarsaakje it kanaal te sluten, sadat it libben fan it kanaal koarter wêze kin as dy fan 'e ferbining.

Wêr wurdt RabbitMQ brûkt?

Yn 'e kontekst fan mikrotsjinsten, it protokol AMQP en de útfiering dêrfan yn RabbitMQ faak brûkt foar asynchrone ynteraksje tusken tsjinsten.

Yn de kontekst IIOT protokol AMQP en de útfiering dêrfan yn RabbitMQ brûkt foar gegevensútwikseling tusken servers (server-tsjinner). Brûk ek de plugin MQTT Plugin RabbitMQ dat is in ymplemintaasje fan it protokol MQTT foar it oerdragen fan gegevens tusken sensor en tsjinner yn omjouwings mei lege snelheid, hege latency (in folsleine list mei stipe protokollen is fermeld op projekt webside).

Yn it folgjende artikel sille wy begjinne te begripen Exchanges yn mear detail.

referinsjes

Boarne: www.habr.com

Add a comment