RabbitMQ. 1. daļa. Ievads. Erlang, AMQP

Sveiki, Habr! Vēlos dalīties ar manu apmācību-rokasgrāmatu, kuru esmu izstrādājis, pamatojoties uz RabbitMQ un apkopojis īsās rekomendācijās un secinājumos.

Saturs

  • RabbitMQ. 1. daļa. Ievads. Erlang, AMQP un RPC
  • RabbitMQ. 2. daļa. Apskatām Exchanges
  • RabbitMQ. 3. daļa. Apskatām Rindas un Bindings
  • RabbitMQ. 4. daļa. Sākam izprast, kas ir ziņas un ietvari
  • RabbitMQ. 5. daļa. Ziņu publicēŔanas un patēriņa veiktspēja
  • RabbitMQ. 6. daļa. Moduļu Federation un Shovel pārskats
  • RabbitMQ. 7. daļa. Detalizēti par Savienojumu un Kanalizāciju
  • RabbitMQ. 8. daļa. RabbitMQ .NET vidē
  • RabbitMQ. 9. daļa. UzraudzÄ«ba

ÄŖsi par AMQP

AMQP (Advanced Message Queuing Protocol) ir atvērts protokols ziņu pārsÅ«tīŔanai starp sistēmas komponentiem. Galvenā ideja ir tāda, ka atseviŔķas apakÅ”sistēmas (vai neatkarÄ«gas lietojumprogrammas) var apmainÄ«ties ar ziņām, izmantojot AMQP brokeri, kas nodroÅ”ina marÅ”rutēŔanu, iespējams, garantē piegādi, datu plÅ«smu sadalīŔanu, abonēŔanu uz nepiecieÅ”amajiem ziņu veidiem.

Protokols AMQP ievieÅ” trÄ«s jēdzienus:

RabbitMQ. 1. daļa. Ievads. Erlang, AMQP

  • apmaiņa (apmaiņas punkts vai apmaiņa) — tajā tiek nosÅ«tÄ«tas ziņas. Apmaiņas punkts izdala ziņu ieliek vienā vai vairākās rindās. Tas marÅ”rutē ziņas rindā balstoties uz izveidotajām saitēm (binding) starp to un rindu
  • queue (rinda) — datu struktÅ«ra uz diskā vai operatÄ«vajā atmiņā, kas uzglabā ziņu saites un nodod ziņu kopijas consumers (patērētājiem)
  • binding (saistīŔana) — noteikums, kas norāda apmaiņas punktam, uz kuru no rindām Ŕīs ziņas jānonāk

Protokols darbojas virs TCP/IP.

ÄŖsi par Erlang

Projekta avota kods atrodas repozitorijā uz GitHub. Arhitektūra RabbitMQ-server balstās uz Erlang un BEAM.

Erlang tika izstrādāta uzņēmumā Ericsson 1980. gadu vidū kā sadalīta, noturīga, reāllaika sistēma lietojumprogrammām, kas prasa bezatliktīgo darbību 99,999%. Erlang tiek izmantota dažādās nozarēs un mūsdienu lietojumprogrammām, piemēram: WhatsApp. Vairāk var izlasīt rakstā WhatsApp arhitektūra, ko Facebook nopirka par 19 miljardiem dolāru

ÄŖsi par RabbitMQ

RabbitMQ – tas ir atvērtā koda ziņu brokeris. Tas marÅ”rutē ziņas saskaņā ar visiem pamatprincipiem protokola AMQP aprakstÄ«ts specifikāciju. RabbitMQ Ä«steno un papildina protokolu AMQP.

Galvenā ideja ziņu apmaiņas modelÄ« RabbitMQ ir tāda, ka producer (izdevējs) neizsÅ«ta ziņas tieÅ”i rindā. PatiesÄ«bā un diezgan bieži izdevējs pat nezina, vai ziņa vispār tiks piegādāta kādā rindā.

Tā vietā izdevējs var nosÅ«tÄ«t ziņojumus tikai uz apmaiņu. No vienas puses, apmaiņa saņem ziņojumus no izdevējiem, bet no otras puses — nosÅ«ta tos rindās. Apmaiņai precÄ«zi jāzina, ko darÄ«t ar saņemto ziņojumu. Vai tas jāpievieno konkrētai rindai? Vai tam jābÅ«t pievienotam vairākām rindām? Vai ziņojums ir jāignorē?

RabbitMQ. 1. daļa. Ievads. Erlang, AMQP

DarboŔanās īsumā RabbitMQ var tikt raksturota Ŕādi:

  1. Izdevējs nosūta ziņojumu noteiktai apmaiņai
  2. Apmaiņa, saņemot ziņojumu, marÅ”rutē to uz vienu vai vairākām rindām saskaņā ar piesaistes noteikumiem starp to un rindu
  3. Rinda glabā atsauci uz Å”o ziņojumu. Pats ziņojums tiek glabāts operatÄ«vajā atmiņā vai diskā
  4. Kad patērētājs ir gatavs saņemt ziņojumu no rindas, serveris izveido ziņojuma kopiju pēc atsauces un nosūta
  5. Patērētājs saņem ziņojumu un nosūta brokerim apstiprinājumu
  6. Brokeris, saņemot apstiprinājumu, izdzēŔ ziņojuma kopiju no rindas. Pēc tam izdzēŔ to no operatÄ«vās atmiņas un no diska

RPC

Process RPC (tālruņa procedÅ«ru izsaukums) ir pamats praktiski visām mijiedarbÄ«bām ar kodolu RabbitMQ. Piemēram, sākotnējās sarunas par klienta nosacÄ«jumiem ar RabbitMQ, demonstrē noteiktu procesu RPC. Kad Ŕī secÄ«ba tiks pabeigta, RabbitMQ bÅ«s gatavs pieņemt pieprasÄ«jumus no klienta:

RabbitMQ. 1. daļa. Ievads. Erlang, AMQP

Tāpat specifikācijā AMQP gan klients, gan serveris var izsaukt komandas. Tas nozÄ«mē, ka klients gaida mijiedarbÄ«bu ar serveri. Komandas ir klasēm un metodēm. Piemēram, Connection.Start – metodes izsaukums Start klase Connection.

Savienojums un kanāli

Šādai informācijas apmaiņai starp klientu un serveri tiek izmantoti kanāli. Kanāli tiek izveidoti noteikta savienojuma ietvaros . Katrs kanāls ir izolēts no citiem kanāliem. Sinhronizētā gadÄ«jumā nav iespējams izpildÄ«t nākamo komandu, pirms nav saņemta atbilde.Lai varētu nosÅ«tÄ«t komandas paralēli, jānopenÅ” vairākus kanālus. Katrs kanāls izveido atseviŔķu

procesu. Vienam savienojumam var bÅ«t daudzi kanāli ( Erlang multiplexing). Katram kanālam ir noteiktas struktÅ«ras un objekti atmiņā. Tādēļ, jo vairāk kanālu ir savienojumā, jovairāk atmiņas izmanto RabbitMQ Ŕādas savienojuma pārvaldÄ«bai. VienkārÅ”s piemērs savienojuma un kanāla izveidoÅ”anai, izmantojot

RabbitMQ. 1. daļa. Ievads. Erlang, AMQP

VienkārÅ”s piemērs, kā izveidot savienojumu un kanālu, izmantojot 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 
}

Jaunu savienojumu atvērt katrai operācijai ir stingri ieteicams neizdarÄ«t, jo tas izraisÄ«s lielas izmaksas. Kanāliem arÄ« jābÅ«t pastāvÄ«giem, taču daudzas protokola kļūdas noved pie kanāla slēgÅ”anas, tādēļ kanāla kalpoÅ”anas laiks var bÅ«t Ä«sāks nekā savienojumam.

Kur tiek izmantots RabbitMQ?

Mikroservisu kontekstā protokolu AMQP un tā realizāciju RabbitMQ bieži izmanto, lai veiktu asinkronu mijiedarbību starp pakalpojumiem.

Kontekstā IIOT protokols AMQP un tā realizāciju RabbitMQ to izmanto datu apmaiņai starp serveriem (serveris-serverim). ArÄ« izmanto papildinājumu RabbitMQ MQTT Plugin kas ir protokola MQTT realizācija datu nodoÅ”anai starp sensoru un serveri zemu ātrumu vidē ar augstu latentumu (pilns atbalstÄ«to protokolu saraksts norādÄ«ts projekta vietne).

Nākamajā rakstā sāksim dziļāk izpētīt Exchanges.

Saites

Avots: habr.com

Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster