RabbitMQ. 1. zatia. Sarrera. Erlang, AMQP

Arratsalde on, Habr! Biltzea lortu dudan testuliburu-erreferentzia-liburu bat partekatu nahi dut RabbitMQ eta gomendio eta ondorio laburretan laburtu.

Edukien taula

  • RabbitMQ. 1. zatia. Sarrera. Erlang, AMQP eta RPC
  • RabbitMQ. 2. zatia. Trukeak ulertzea
  • RabbitMQ. 3. zatia. Ilarak eta loturak ulertzea
  • RabbitMQ. 4. zatia. Mezuak eta markoak zer diren ulertzea
  • RabbitMQ. 5. zatia: Mezuen errendimendua argitaratzea eta kontsumitzea
  • RabbitMQ. 6. zatia. Federazioaren eta Pala moduluen ikuspegi orokorra
  • RabbitMQ. 7. zatia. Connection eta Chanel-ari buruzko xehetasunak
  • RabbitMQ. 8. zatia. RabbitMQ .NET-en
  • RabbitMQ. 9. zatia. Jarraipena

AMQPri buruz laburki

AMQP (Advanced Message Queuing Protocol) sistemaren osagaien artean mezuak igortzeko protokolo irekia da. Oinarrizko ideia da azpisistema indibidualek (edo aplikazio independenteek) mezuak modu arbitrarioan truka ditzaketela AMQP bitartekari baten bidez, zeinak bideratzea egiten du, ziurrenik entrega bermatzen du, datu-korronteak banatzen ditu eta nahi diren mezu motetara harpidetzen da.

protokoloa AMQP hiru kontzeptu aurkezten ditu:

RabbitMQ. 1. zatia. Sarrera. Erlang, AMQP

  • exchange (truke-puntua edo trukea) - mezuak bertara bidaltzen dira. Truke puntua mezua banatzen du ilara batean edo gehiagotan. Bera mezuak ilara batera bideratzen ditu sortutako esteketan oinarrituta (binding) haren eta ilararen artean
  • queue (ilaran) - diskoan edo RAM-n dagoen datu-egitura mezuetarako estekak gordetzen ditu eta mezuen kopiak ematen ditu consumers (kontsumitzaileei)
  • binding (loteslea) - arau hori mezu horiek zein ilaratan sartu behar diren esaten dio truke puntuari

Protokoloa goian doa TCP / IP.

Erlangi buruz laburki

Proiektuaren iturburu kodea helbidean dago biltegian GitHub. Arkitektura RabbitMQ-zerbitzaria oinarrituta erlang eta HABEA.

Erlang enpresak garatutakoa Ericsson 1980ko hamarkadaren erdialdean, akatsak jasan ditzakeen eta denbora errealeko sistema gisa, %99,999ko denbora behar duten aplikazioetarako. Erlang hainbat industriatan eta aplikazio modernoetan erabiltzen da, adibidez. WhatsApp. Artikuluan gehiago irakur dezakezu WhatsApp arkitektura, Facebookek 19 milioi dolarren truke erosi zuena

RabbitMQ-i buruz laburki

RabbitMQ kode irekiko mezuen bitartekari bat da. Mezuak protokoloaren oinarrizko printzipio guztietan zehar bideratzen ditu AMQP atalean deskribatuta zehaztapenak. RabbitMQ protokoloa ezartzen eta osatzen du AMQP.

Mezularitza-ereduaren ideia nagusia RabbitMQ gauza da producer (argitaratzaileak) ez ditu mezuak zuzenean ilarara bidaltzen. Izan ere, eta sarritan, argitaletxeak ez daki mezua ilararen batean entregatuko den ere.

Horren ordez, argitaletxeak trukera soilik bidali ditzake mezuak. Alde batetik, trukeak argitaletxeen mezuak jasotzen ditu, eta, bestetik, ilaretara bidaltzen ditu. Trukeak zehatz-mehatz jakin behar du zer egin jasotzen duen mezuarekin. Ilara zehatz batean gehitu behar al da? Ilara anitzetan gehitu behar al da? Edo mezuari jaramonik egin behar zaio.

RabbitMQ. 1. zatia. Sarrera. Erlang, AMQP

Lan laburra RabbitMQ honela deskriba daiteke:

  1. Argitaletxeak mezu bat bidaltzen du truke jakin batera
  2. Truke batek, mezu bat jaso ondoren, ilara batera edo gehiagotara bideratzen du, haren eta ilararen arteko lotesle arauen arabera.
  3. Ilarak mezu honen erreferentzia gordetzen du. Mezua bera RAM edo diskoan gordetzen da
  4. Kontsumitzailea ilaratik mezu bat jasotzeko prest dagoenean, zerbitzariak mezuaren kopia bat sortzen du estekaren bidez eta bidaltzen du.
  5. Kontsumitzaileak mezua jasotzen du eta berrespena bidaltzen dio artekariari
  6. Agenteak, berrespena jaso ondoren, mezuaren kopia bat kentzen du ilaratik. Ondoren, RAM eta diskotik ezabatzen du

RPC

Prozesu RPC (urruneko prozedura-deia) nukleoarekin ia elkarrekintza guztien azpian dago RabbitMQ. Adibidez, bezeroaren baldintzei buruzko hasierako eztabaidak RabbitMQ, prozesu jakin bat erakusten du RPC. Sekuentzia hau amaitutakoan, RabbitMQ prest egongo da bezeroaren eskaerak onartzeko:

RabbitMQ. 1. zatia. Sarrera. Erlang, AMQP

Baita zehaztapenean ere AMQP bai bezeroak bai zerbitzariak aginduak eman ditzakete. Horrek esan nahi du bezeroa zerbitzariarekin komunikatzeko zain dagoela. Komandoak klaseak eta metodoak dira. Adibidez, Connection.Start – metodo-deia Start class Connection.

Konexioa eta kanalak

Bezeroaren eta zerbitzariaren arteko informazio trukaketa hori egiteko, kanalak. Kanalak barruan sortzen dira konexio zehatza. Kanal bakoitza beste kanaletatik isolatuta dago. Kasu sinkronoan, ezin da hurrengo komandoa exekutatu erantzun bat jaso arte.

Komandoak paraleloan bidali ahal izateko, hainbat kanal ireki behar dituzu. Kanal bakoitzak bereizi bat sortzen du Erlang prozesua. Konexio batek hainbat kanal izan ditzake (multiplexazioa). Kanal bakoitzeko zenbait egitura eta objektu daude memorian. Beraz, zenbat eta kanal gehiago egon konexio baten barruan, orduan eta RabbitMQ-k memoria gehiago erabiltzen du konexio hori kudeatzeko.

RabbitMQ. 1. zatia. Sarrera. Erlang, AMQP

Konexioa eta kanala erabiltzearen adibide sinplea RabbitMQ.Bezeroa:

// ...
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 
}

Eragiketa bakoitzerako konexio berri bat irekitzea oso gomendagarria da kostu handiak ekarriko ditu. Kanalek ere iraunkorrak izan behar dute, baina protokolo-errore askok kanala ixtea eragiten dute, beraz, kanalaren iraupena konexioarena baino laburragoa izan daiteke.

Non erabiltzen da RabbitMQ?

Mikrozerbitzuen testuinguruan, protokoloa AMQP eta bere ezarpenean RabbitMQ askotan erabiltzen da elkarrekintza asinkronoa zerbitzuen artean.

Testuinguruan IIOT protokoloa AMQP eta bere ezarpenean RabbitMQ zerbitzarien arteko datuak trukatzeko erabiltzen da (zerbitzari-zerbitzaria). Erabili plugina ere MQTT Plugin RabbitMQ protokoloaren ezarpena dena MQTT abiadura baxuko eta latentzia handiko inguruneetan sentsorearen eta zerbitzariaren artean datuak transmititzeko (onartutako protokoloen zerrenda osoa hemen ageri da. proiektuaren webgunea).

Hurrengo artikuluan Trukeak zehatzago ulertzen hasiko gara.

Erreferentziak

Iturria: www.habr.com

Gehitu iruzkin berria