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:
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
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.
Kazi fupi RabbitMQ inaweza kuelezewa kama ifuatavyo:
Mchapishaji hutuma ujumbe kwa kubadilishana maalum
Ubadilishanaji, baada ya kupokea ujumbe, huipeleka kwenye foleni moja au zaidi kwa mujibu wa sheria za kisheria kati yake na foleni.
Foleni huhifadhi marejeleo ya ujumbe huu. Ujumbe wenyewe umehifadhiwa kwenye RAM au kwenye diski
Mara tu mtumiaji yuko tayari kupokea ujumbe kutoka kwa foleni, seva huunda nakala ya ujumbe kupitia kiunga na kutuma.
Mtumiaji hupokea ujumbe na kutuma uthibitisho kwa wakala
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:
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.
Mfano rahisi wa kuunda muunganisho na kituo kwa kutumia RabbitMQ.Mteja:
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.