RabbitMQ. Ntu 1. Kev Taw Qhia. Erlang, AMQP

Nyob zoo tav su, Habr! Kuv xav qhia ib phau ntawv nyeem-reference phau ntawv ntawm kev paub uas kuv tswj tau sau rau RabbitMQ thiab condense rau hauv cov lus qhia luv luv thiab cov lus xaus.

Cov txheej txheem

  • RabbitMQ. Ntu 1. Kev Taw Qhia. Erlang, AMQP thiab RPC
  • RabbitMQ. Ntu 2. Nkag siab txog kev sib pauv
  • RabbitMQ. Ntu 3. Nkag siab cov lus nug thiab kev khi
  • RabbitMQ. Ntu 4. Nkag siab txog cov lus thiab cov ncej dab tsi
  • RabbitMQ. Ntu 5: Kev Tshaj Tawm thiab Siv Cov Lus Qhia Ua Haujlwm
  • RabbitMQ. Ntu 6. Txheej txheem cej luam ntawm Federation thiab Shovel Modules
  • RabbitMQ. Part 7. Paub meej txog kev sib txuas thiab Chanel
  • RabbitMQ. Part 8. RabbitMQ hauv .NET
  • RabbitMQ. Ntu 9. Kev soj ntsuam

Luv luv txog AMQP

AMQP (Advanced Message Queuing Protocol) yog qhov qhib raws tu qauv rau kev xa xov ntawm cov kab ke. Lub tswv yim tseem ceeb yog tias ib tus neeg subsystems (lossis cov ntawv thov ywj pheej) tuaj yeem sib pauv cov lus hauv ib qho kev txiav txim siab los ntawm AMQP tus broker, uas ua haujlwm, muaj peev xwm lav kev xa khoom, faib cov ntaub ntawv ntws, thiab sau npe rau hom lus xav tau.

Raws tu qauv AMQP qhia peb lub tswv yim:

RabbitMQ. Ntu 1. Kev Taw Qhia. Erlang, AMQP

  • exchange (piv point lossis pauv) - cov lus raug xa mus rau nws. Sib pauv point faib cov lus nyob rau hauv ib los yog ntau dua kab. Nws xa cov lus mus rau ib kab raws li cov links tsim (binding) ntawm nws thiab lub queue
  • queue (queue) - cov qauv ntaub ntawv ntawm disk lossis hauv RAM uas khw muag khoom txuas rau cov lus thiab muab cov ntawv luam ntawm cov lus consumers (rau cov neeg siv khoom)
  • binding (binding) - ib txoj cai uas qhia qhov sib pauv taw tes uas queue cov lus no yuav tsum mus rau hauv

Cov txheej txheem khiav saum toj kawg nkaus TCP / IP.

Luv luv txog Erlang

Qhov project qhov chaws code yog nyob rau hauv repository ntawm GitHub. Kev tsim vaj tsev RabbitMQ-neeg rau zaub mov nyob ntawm erlang thiab BEAM.

Erlang tsim los ntawm lub tuam txhab Ericsson nyob rau hauv nruab nrab-1980s raws li ib tug faib, txhaum-tolerant, real-time system rau daim ntawv thov yuav tsum tau 99,999% uptime. Erlang siv nyob rau hauv ntau yam kev lag luam thiab kev siv niaj hnub, xws li. WhatsApp. Koj tuaj yeem nyeem ntxiv hauv kab lus WhatsApp architecture, uas Facebook yuav rau $ 19 billion

Luv luv txog RabbitMQ

RabbitMQ yog ib qhov chaw qhib xov xwm broker. Nws xa cov lus raws tag nrho cov hauv paus ntsiab lus ntawm cov txheej txheem AMQP piav nyob rau hauv cov lus qhia tshwj xeeb. RabbitMQ siv thiab ntxiv cov txheej txheem AMQP.

Lub tswv yim tseem ceeb ntawm cov qauv kev xa xov hauv RabbitMQ qhov yog producer (Publisher) tsis xa cov lus ncaj qha mus rau kab. Qhov tseeb, thiab feem ntau, tus tshaj tawm tsis paub txawm tias cov lus yuav raug xa mus rau ib qho twg txhua.

Hloov chaw, tus tshaj tawm tsuas tuaj yeem xa cov lus mus rau kev sib pauv. Ntawm ib sab, kev sib pauv tau txais cov lus los ntawm cov tshaj tawm, thiab ntawm qhov tod tes, nws xa lawv mus rau queues. Kev sib pauv yuav tsum paub meej tias yuav ua li cas nrog cov lus nws tau txais. Nws puas yuav tsum tau ntxiv rau ib qho kab ke tshwj xeeb? Nws puas yuav tsum tau ntxiv rau ntau txoj kab? Los yog cov lus yuav tsum tsis quav ntsej.

RabbitMQ. Ntu 1. Kev Taw Qhia. Erlang, AMQP

Ua haujlwm luv luv RabbitMQ tuaj yeem piav raws li hauv qab no:

  1. Tus tshaj tawm xa xov mus rau ib qho kev sib pauv tshwj xeeb
  2. Ib qho kev sib pauv, tau txais cov lus, xa nws mus rau ib lossis ntau lub queues raws li txoj cai khi ntawm nws thiab cov kab.
  3. Cov kab ntawv khaws cov lus siv rau cov lus no. Cov lus nws tus kheej yog khaws cia hauv RAM lossis hauv disk
  4. Thaum tus neeg siv khoom npaj tau txais cov lus los ntawm kab, tus neeg rau zaub mov tsim ib daim qauv ntawm cov lus ntawm qhov txuas thiab xa
  5. Cov neeg siv khoom tau txais cov lus thiab xa kev pom zoo rau tus broker
  6. Tus broker, thaum tau txais kev pom zoo, tshem tawm ib daim qauv ntawm cov lus los ntawm kab. Tom qab ntawd tshem tawm ntawm RAM thiab disk

RPC

txheej txheem RPC (tus txheej txheem hu xov tooj nyob deb) underlies yuav luag tag nrho cov kev cuam tshuam nrog lub nucleus RabbitMQ. Piv txwv li, thawj zaug sib tham txog tus neeg siv khoom cov lus nrog RabbitMQ, ua kom pom ib qho txheej txheem RPC. Thaum cov txheej txheem no tiav, RabbitMQ yuav npaj txais kev thov los ntawm tus neeg siv khoom:

RabbitMQ. Ntu 1. Kev Taw Qhia. Erlang, AMQP

Kuj nyob rau hauv specification AMQP ob tus neeg siv khoom thiab tus neeg rau zaub mov tuaj yeem tshaj tawm cov lus txib. Qhov no txhais tau hais tias tus neeg siv khoom tab tom tos kev sib txuas lus nrog lub server. Cov lus txib yog cov chav kawm thiab cov txheej txheem. Piv txwv li, Connection.Start – txoj kev hu Start chav kawm Connection.

Kev sib txuas thiab cov channel

Rau xws li cov ntaub ntawv sib pauv ntawm cov neeg siv khoom thiab server, raws. Channels yog tsim nyob rau hauv kev sib txuas tshwj xeeb. Txhua channel raug cais tawm ntawm lwm cov channel. Hauv cov ntaub ntawv synchronous, nws tsis tuaj yeem ua tiav cov lus txib tom ntej kom txog thaum tau txais cov lus teb.

Yuav kom xa cov lus txib nyob rau hauv parallel, koj yuav tsum qhib ob peb channel. Txhua channel tsim ib qho kev sib cais Erlang txheej txheem. Ib qho kev sib txuas tuaj yeem muaj ntau yam channel (multiplexing). Rau txhua qhov channel muaj qee cov qauv thiab cov khoom hauv nco. Yog li ntawd, qhov ntau channel muaj nyob rau hauv ib qho kev sib txuas, lub RabbitMQ siv ntau lub cim xeeb tswj kev sib txuas zoo li no.

RabbitMQ. Ntu 1. Kev Taw Qhia. Erlang, AMQP

Ib qho piv txwv yooj yim ntawm kev tsim kev sib txuas thiab siv channel 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 
}

Qhib kev sib txuas tshiab rau txhua qhov kev ua haujlwm yog kev poob siab heev li qhov no yuav ua rau cov nqi siab. Cov channel tseem yuav tsum tsis tu ncua, tab sis ntau qhov kev cai yuam kev ua rau cov channel kaw, yog li lub neej ntawm cov channel yuav luv dua li qhov kev sib txuas.

RabbitMQ siv qhov twg?

Hauv cov ntsiab lus ntawm microservices, raws tu qauv AMQP thiab nws qhov kev siv hauv RabbitMQ feem ntau siv rau kev sib txuas lus asynchronous nruab nrab ntawm cov kev pabcuam.

Hauv cov ntsiab lus IIOT raws tu qauv AMQP thiab nws qhov kev siv hauv RabbitMQ siv rau kev sib pauv ntaub ntawv ntawm servers (server-server). Kuj tseem siv lub plugin MQTT Plugin RabbitMQ uas yog ib qho kev siv raws tu qauv MQTT rau kev xa cov ntaub ntawv ntawm sensor thiab server nyob rau hauv qis-ceev, high-latency ib puag ncig (ib daim ntawv teev tag nrho cov kev txhawb nqa raws tu qauv tau teev nyob rau ntawm qhov project website).

Nyob rau hauv tsab xov xwm tom ntej peb yuav pib nkag siab txog kev sib pauv hauv kev nthuav dav ntxiv.

ua tim khawv

Tau qhov twg los: www.hab.com

Ntxiv ib saib