RabbitMQ. Deel 1. Inleiding. Erlang, AMQP

Goeiemiddag, Habr! Ek wil 'n handboek-naslaanboek van kennis deel wat ek daarin geslaag het om te versamel RabbitMQ en konsentreer in kort aanbevelings en gevolgtrekkings.

Inhoudsopgawe

  • RabbitMQ. Deel 1. Inleiding. Erlang, AMQP en RPC
  • RabbitMQ. Deel 2. Verstaan ​​uitruilings
  • RabbitMQ. Deel 3. Verstaan ​​toue en bindings
  • RabbitMQ. Deel 4. Verstaan ​​wat boodskappe en rame is
  • RabbitMQ. Deel 5: Publiseer en gebruik Boodskapprestasie
  • RabbitMQ. Deel 6. Oorsig van die Federasie en Shovel Modules
  • RabbitMQ. Deel 7. Besonderhede oor Connection en Chanel
  • RabbitMQ. Deel 8. RabbitMQ in .NET
  • RabbitMQ. Deel 9. Monitering

Kortliks oor AMQP

AMQP (Advanced Message Queuing Protocol) is 'n oop protokol vir die oordrag van boodskappe tussen stelselkomponente. Die basiese idee is dat individuele substelsels (of onafhanklike toepassings) boodskappe op 'n arbitrêre wyse kan uitruil deur 'n AMQP-makelaar, wat roetering uitvoer, moontlik aflewering waarborg, datastrome versprei en inteken op die gewenste boodskaptipes.

protokol AMQP stel drie konsepte bekend:

RabbitMQ. Deel 1. Inleiding. Erlang, AMQP

  • exchange (ruilpunt of ruil) - boodskappe word daarheen gestuur. Ruilpunt versprei die boodskap in een of meer rye. Sy stuur boodskappe na 'n tou gebaseer op geskepte skakels (binding) tussen hom en die tou
  • queue (tou) - 'n datastruktuur op skyf of in RAM wat stoor skakels na boodskappe en gee afskrifte van boodskappe consumers (aan verbruikers)
  • binding (bindend) - 'n reël wat vertel die uitruilpunt in watter tou hierdie boodskappe moet gaan

Die protokol loop bo-op TCP / IP.

Kortliks oor Erlang

Die projek se bronkode is in die bewaarplek by GitHub. Argitektuur RabbitMQ-bediener gebaseer op erlang en BEAM.

Erlang ontwikkel deur die maatskappy Ericsson in die middel-1980's as 'n verspreide, foutverdraagsame, intydse stelsel vir toepassings wat 99,999% uptyd vereis. Erlang gebruik in verskeie industrieë en moderne toepassings, bv. WhatsApp. Jy kan meer lees in die artikel WhatsApp-argitektuur, wat Facebook vir $19 miljard gekoop het

Kortliks oor RabbitMQ

Konyn MQ is 'n oopbron boodskap makelaar. Dit stuur boodskappe langs al die basiese beginsels van die protokol AMQP beskryf in spesifikasies. RabbitMQ implementeer en vul die protokol aan AMQP.

Die hoofgedagte van die boodskapmodel in RabbitMQ ding is producer (uitgewer) stuur nie boodskappe direk na die tou nie. Trouens, en nogal dikwels, weet die uitgewer nie eens of die boodskap enigsins by enige tou afgelewer sal word nie.

In plaas daarvan kan die uitgewer slegs boodskappe na die beurs stuur. Aan die een kant ontvang die uitruil boodskappe van uitgewers, en aan die ander kant stuur dit hulle na toue. Die uitruil moet presies weet wat om te doen met die boodskap wat hy ontvang. Moet dit by 'n spesifieke tou gevoeg word? Moet dit by verskeie toue gevoeg word? Of die boodskap moet geïgnoreer word.

RabbitMQ. Deel 1. Inleiding. Erlang, AMQP

Kort werk RabbitMQ kan soos volg beskryf word:

  1. Die uitgewer stuur 'n boodskap na 'n spesifieke beurs
  2. 'n Uitruiling, nadat 'n boodskap ontvang is, stuur dit na een of meer toue in ooreenstemming met die bindende reëls tussen dit en die tou
  3. Die tou stoor 'n verwysing na hierdie boodskap. Die boodskap self word in RAM of op skyf gestoor
  4. Sodra die verbruiker gereed is om 'n boodskap uit die tou te ontvang, skep die bediener 'n kopie van die boodskap via die skakel en stuur
  5. Die verbruiker ontvang die boodskap en stuur bevestiging aan die makelaar
  6. Die makelaar, na ontvangs van bevestiging, verwyder 'n afskrif van die boodskap uit die tou. Vee dan van RAM en skyf uit

RPC

proses RPC (afstandprosedure-oproep) onderlê byna alle interaksies met die kern RabbitMQ. Byvoorbeeld, aanvanklike besprekings oor die kliënt se terme met RabbitMQ, demonstreer 'n sekere proses RPC. Sodra hierdie volgorde voltooi is, RabbitMQ gereed sal wees om versoeke van die kliënt te aanvaar:

RabbitMQ. Deel 1. Inleiding. Erlang, AMQP

Ook in die spesifikasie AMQP beide die kliënt en bediener kan opdragte uitreik. Dit beteken dat die kliënt wag om met die bediener te kommunikeer. Opdragte is klasse en metodes. Byvoorbeeld, Connection.Start – metode oproep Start klas Connection.

Verbinding en kanale

Vir sulke inligting-uitruiling tussen kliënt en bediener, kanale. Kanale word binne geskep spesifieke verband. Elke kanaal is geïsoleer van ander kanale. In die sinchrone geval is dit nie moontlik om die volgende opdrag uit te voer totdat 'n antwoord ontvang is nie.

Om opdragte parallel te kan stuur, moet jy verskeie kanale oopmaak. Elke kanaal skep 'n aparte Erlang proses. Een verbinding kan verskeie kanale hê (multiplexing). Vir elke kanaal is daar sekere strukture en voorwerpe in die geheue. Daarom, hoe meer kanale daar binne 'n verbinding is, hoe RabbitMQ gebruik meer geheue om so 'n verbinding te bestuur.

RabbitMQ. Deel 1. Inleiding. Erlang, AMQP

'N Eenvoudige voorbeeld van die skep van 'n verbinding en kanaal met behulp van 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 
}

Dit word ten sterkste ontmoedig om 'n nuwe verbinding vir elke operasie oop te maak sal lei tot hoë koste. Kanale moet ook aanhoudend wees, maar baie protokolfoute veroorsaak dat die kanaal sluit, dus kan die leeftyd van die kanaal korter wees as dié van die verbinding.

Waar word RabbitMQ gebruik?

In die konteks van mikrodienste, die protokol AMQP en die implementering daarvan in RabbitMQ dikwels gebruik vir asynchrone interaksie tussen dienste.

In die konteks IIOT protokol AMQP en die implementering daarvan in RabbitMQ gebruik vir data-uitruiling tussen bedieners (bediener-bediener). Gebruik ook die inprop MQTT-inprop RabbitMQ wat 'n implementering van die protokol is MQTT vir die oordrag van data tussen sensor en bediener in lae-spoed, hoë-latency omgewings ('n volledige lys van ondersteunde protokolle word gelys by projek webwerf).

In die volgende artikel sal ons uitruilings in meer besonderhede begin verstaan.

verwysings

Bron: will.com

Voeg 'n opmerking