RabbitMQ. Sehemu ya 1. Utangulizi. Erlang, AMQP

Habari za mchana, Habr! Ninataka kushiriki kitabu cha marejeleo cha kiada ambacho niliweza kukusanya RabbitMQ na kufupisha katika mapendekezo mafupi na hitimisho.

Meza ya yaliyomo

  • RabbitMQ. Sehemu ya 1. Utangulizi. Erlang, AMQP na RPC
  • RabbitMQ. Sehemu ya 2. Kuelewa Mabadilishano
  • RabbitMQ. Sehemu ya 3. Kuelewa Foleni na Vifungo
  • RabbitMQ. Sehemu ya 4. Kuelewa ujumbe na muafaka ni nini
  • RabbitMQ. Sehemu ya 5: Uchapishaji wa Ujumbe na Utendaji wa Matumizi
  • RabbitMQ. Sehemu ya 6. Mapitio ya moduli za Shirikisho na Jembe
  • RabbitMQ. Sehemu ya 7. Maelezo kuhusu Muunganisho na Chanel
  • RabbitMQ. Sehemu ya 8. RabbitMQ katika .NET
  • RabbitMQ. Sehemu ya 9. Ufuatiliaji

Kwa kifupi kuhusu AMQP

AMQP (Itifaki ya Kuweka Foleni ya Juu ya Ujumbe) ni itifaki iliyo wazi ya kutuma ujumbe kati ya vipengee vya mfumo. Wazo la msingi ni kwamba mifumo ndogo ya kibinafsi (au programu zinazojitegemea) zinaweza kubadilishana ujumbe kwa njia ya kiholela kupitia wakala wa AMQP, ambaye hufanya uelekezaji, ikiwezekana kuhakikisha uwasilishaji, kusambaza mitiririko ya data, na kujisajili kwa aina za ujumbe unaotaka.

Itifaki AMQP inaleta dhana tatu:

RabbitMQ. Sehemu ya 1. Utangulizi. Erlang, AMQP

  • exchange (hatua ya kubadilishana au kubadilishana) - ujumbe hutumwa kwake. Kiwango cha ubadilishaji inasambaza ujumbe katika foleni moja au zaidi. Yeye huelekeza ujumbe kwenye foleni kulingana na miunganisho iliyoundwa (binding) kati yake na foleni
  • queue (foleni) - muundo wa data kwenye diski au kwenye RAM hiyo huhifadhi viungo vya ujumbe na kutoa nakala za ujumbe consumers (kwa watumiaji)
  • binding (binding) - sheria kwamba inaelezea sehemu ya kubadilishana ambayo barua pepe hizi zinapaswa kuingia

Itifaki inaendesha juu TCP / IP.

Kwa kifupi kuhusu Erlang

Msimbo wa chanzo wa mradi uko kwenye ghala la GitHub. Usanifu RabbitMQ-server kulingana na erlang na BEAM.

Erlang iliyotengenezwa na kampuni Ericsson katikati ya miaka ya 1980 kama mfumo uliosambazwa, unaostahimili makosa, na wa wakati halisi kwa programu zinazohitaji muda wa nyongeza wa 99,999%. Erlang kutumika katika tasnia mbalimbali na matumizi ya kisasa, k.m. WhatsApp. Unaweza kusoma zaidi katika makala Usanifu wa WhatsApp, ambao Facebook ilinunua kwa $19 bilioni

Kwa kifupi kuhusu RabbitMQ

SunguraMQ ni wakala wa ujumbe wa chanzo huria. Inapitisha ujumbe pamoja na kanuni zote za msingi za itifaki AMQP ilivyoelezwa katika vipimo. RabbitMQ kutekeleza na kuongeza itifaki AMQP.

Wazo kuu la muundo wa ujumbe katika RabbitMQ jambo ni producer (mchapishaji) haitumi ujumbe moja kwa moja kwenye foleni. Kwa kweli, na mara nyingi, mchapishaji hajui hata kama ujumbe utawasilishwa kwa foleni yoyote.

Badala yake, mchapishaji anaweza tu kutuma ujumbe kwa kubadilishana. Kwa upande mmoja, kubadilishana hupokea ujumbe kutoka kwa wachapishaji, na kwa upande mwingine, huwatuma kwenye foleni. Ubadilishanaji lazima ujue nini cha kufanya na ujumbe unaopokea. Je, inapaswa kuongezwa kwa foleni maalum? Je, inafaa kuongezwa kwa foleni nyingi? Au ujumbe unapaswa kupuuzwa.

RabbitMQ. Sehemu ya 1. Utangulizi. Erlang, AMQP

Kazi fupi RabbitMQ inaweza kuelezewa kama ifuatavyo:

  1. Mchapishaji hutuma ujumbe kwa kubadilishana maalum
  2. Ubadilishanaji, baada ya kupokea ujumbe, huipeleka kwenye foleni moja au zaidi kwa mujibu wa sheria za kisheria kati yake na foleni.
  3. Foleni huhifadhi marejeleo ya ujumbe huu. Ujumbe wenyewe umehifadhiwa kwenye RAM au kwenye diski
  4. Mara tu mtumiaji yuko tayari kupokea ujumbe kutoka kwa foleni, seva huunda nakala ya ujumbe kupitia kiunga na kutuma.
  5. Mtumiaji hupokea ujumbe na kutuma uthibitisho kwa wakala
  6. Dalali, akipokea uthibitisho, huondoa nakala ya ujumbe kutoka kwenye foleni. Kisha hufuta kutoka kwa RAM na diski

RPC

mchakato RPC (simu ya utaratibu wa mbali) msingi wa karibu mwingiliano wote na kiini RabbitMQ. Kwa mfano, majadiliano ya awali kuhusu masharti ya mteja na RabbitMQ, inaonyesha mchakato fulani RPC. Mara baada ya mlolongo huu kukamilika, RabbitMQ itakuwa tayari kukubali maombi kutoka kwa mteja:

RabbitMQ. Sehemu ya 1. Utangulizi. Erlang, AMQP

Pia katika vipimo AMQP mteja na seva wanaweza kutoa amri. Hii ina maana kwamba mteja anasubiri kuwasiliana na seva. Amri ni madarasa na mbinu. Kwa mfano, Connection.Start - njia ya kupiga simu Start tabaka la Connection.

Muunganisho na njia

Kwa kubadilishana habari kama hizi kati ya mteja na seva, njia. Vituo vimeundwa ndani uhusiano maalum. Kila chaneli imetengwa na chaneli zingine. Katika kesi ya synchronous, haiwezekani kutekeleza amri inayofuata hadi jibu lipokewe.

Ili uweze kutuma amri kwa sambamba, unapaswa kufungua njia kadhaa. Kila kituo huunda tofauti Erlang mchakato. Muunganisho mmoja unaweza kuwa na chaneli nyingi (kuzidisha) Kwa kila kituo kuna miundo na vitu fulani katika kumbukumbu. Kwa hiyo, njia nyingi zipo ndani ya muunganisho, ndivyo RabbitMQ hutumia kumbukumbu zaidi kusimamia uhusiano kama huo.

RabbitMQ. Sehemu ya 1. Utangulizi. Erlang, AMQP

Mfano rahisi wa kuunda muunganisho na kituo kwa kutumia RabbitMQ.Mteja:

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

Kufungua muunganisho mpya kwa kila operesheni kumekatishwa tamaa sana kama hii itasababisha gharama kubwa. Vituo pia vinapaswa kudumu, lakini hitilafu nyingi za itifaki husababisha chaneli kufungwa, kwa hivyo muda wa maisha wa kituo unaweza kuwa mfupi kuliko ule wa muunganisho.

RabbitMQ inatumika wapi?

Katika muktadha wa huduma ndogo, itifaki AMQP na utekelezaji wake katika RabbitMQ mara nyingi hutumika kwa mwingiliano wa asynchronous kati ya huduma.

Katika muktadha IIOT itifaki AMQP na utekelezaji wake katika RabbitMQ kutumika kwa ajili ya kubadilishana data kati ya seva (server-server). Pia tumia programu-jalizi Programu-jalizi ya MQTT RabbitMQ ambayo ni utekelezaji wa itifaki MQTT kwa kusambaza data kati ya kitambuzi na seva katika mazingira ya kasi ya chini, ya muda wa kusubiri (orodha kamili ya itifaki zinazotumika imeorodheshwa kwenye tovuti ya mradi).

Katika makala inayofuata tutaanza kuelewa Exchanges kwa undani zaidi.

marejeo

Chanzo: mapenzi.com

Kuongeza maoni