RabbitMQ. Part 1. Réamhrá. Erlang, AMQP

Dea-tráthnóna, Habr! Ba mhaith liom leabhar tagartha téacsleabhair a roinnt ar éirigh liom a bhailiú air RabbitMQ agus comhdhlúthú i moltaí agus conclúidí gearra.

Tábla na nÁbhar

  • RabbitMQ. Part 1. Réamhrá. Erlang, AMQP agus RPC
  • RabbitMQ. Cuid 2. Malartáin a Thuiscint
  • RabbitMQ. Cuid 3. Scuainí agus Ceangail a Thuiscint
  • RabbitMQ. Cuid 4. A thuiscint cad is teachtaireachtaí agus frámaí ann
  • RabbitMQ. Cuid 5: Foilsitheoireachta Teachtaireachta agus Feidhmíocht Tomhaltais
  • RabbitMQ. Cuid 6. Athbhreithniú ar mhodúil na Cónaidhme agus na Sluasaid
  • RabbitMQ. Cuid 7. Sonraí maidir le Ceangal agus Chanel
  • RabbitMQ. Cuid 8. RabbitMQ in .NET
  • RabbitMQ. Cuid 9. Faireachán

Go hachomair faoi AMQP

Is prótacal oscailte é AMQP (Ardphrótacal Ciúála Teachtaireachta) chun teachtaireachtaí a tharchur idir comhpháirteanna córais. Is é an bun-smaoineamh gur féidir le fochórais aonair (nó feidhmchláir neamhspleácha) teachtaireachtaí a mhalartú ar bhealach treallach trí bhróicéir AMQP, a fheidhmíonn ródú, b’fhéidir a ráthaíonn seachadadh, a dháileann sruthanna sonraí, agus a shíníonn do na cineálacha teachtaireachtaí atá ag teastáil.

Prótacal AMQP tugtar isteach trí choincheap:

RabbitMQ. Part 1. Réamhrá. Erlang, AMQP

  • exchange (pointe malairte nó malartú) - seoltar teachtaireachtaí chuige. Pointe malairte dáileann teachtaireacht i scuaine amháin nó níos mó. sí cuireann sé teachtaireachtaí chuig scuaine bunaithe ar na naisc chruthaithe (binding) idir é féin agus an scuaine
  • queue (scuaine) - struchtúr sonraí ar dhiosca nó i RAM a stórálann sé naisc le teachtaireachtaí agus tugann sé cóipeanna de theachtaireachtaí consumers (do thomhaltóirí)
  • binding (ceangailteach) - riail go insíonn sé an pointe malartaithe cén scuaine ar cheart do na teachtaireachtaí seo dul isteach ann

Ritheann an prótacal ar an mbarr TCP / IP.

Go hachomair faoi Erlang

Tá cód foinse an tionscadail sa stór ag GitHub. Ailtireacht RabbitMQ freastalaí bunaithe ar erlang agus BEAM.

Erlang forbartha ag an gcuideachta Ericsson i lár na 1980idí mar chóras dáilte, fabht-fhulangach, fíor-ama d'iarratais a éilíonn 99,999% uptime. Erlang a úsáidtear i dtionscail éagsúla agus iarratais nua-aimseartha, m.sh. WhatsApp. Is féidir leat níos mó a léamh san alt Ailtireacht WhatsApp, a cheannaigh Facebook ar $19 billiún

Go hachomair faoi RabbitMQ

Coinín MQ is bróicéir teachtaireachtaí foinse oscailte é. Treoraíonn sé teachtaireachtaí feadh bhunphrionsabail uile an phrótacail AMQP cur síos orthu i sonraíochtaí. RabbitMQ cuireann agus forlíonann an prótacal AMQP.

An príomh-smaoineamh ar an tsamhail teachtaireachtaí i RabbitMQ is é an rud producer (foilsitheoir) teachtaireachtaí a sheoladh go díreach chuig an scuaine. Go deimhin, agus go minic, ní bhíonn a fhios ag an bhfoilsitheoir fiú an seachadfar an teachtaireacht chuig scuaine ar bith ar chor ar bith.

Ina áit sin, ní féidir leis an bhfoilsitheoir ach teachtaireachtaí a sheoladh chuig an malartú. Ar thaobh amháin, faigheann an malartú teachtaireachtaí ó fhoilsitheoirí, agus ar an láimh eile, cuireann sé chuig scuainí iad. Ní mór go mbeadh a fhios ag an malartú go díreach cad atá le déanamh leis an teachtaireacht a fhaigheann sé. Ar chóir é a chur le scuaine ar leith? Ar cheart é a chur le scuainí iolracha? Nó ba cheart neamhaird a dhéanamh den teachtaireacht.

RabbitMQ. Part 1. Réamhrá. Erlang, AMQP

Obair ghairid RabbitMQ is féidir cur síos a dhéanamh air mar seo a leanas:

  1. Seolann an foilsitheoir teachtaireacht chuig malartán ar leith
  2. Déanann malartán, tar éis teachtaireacht a fháil, é a sheoladh chuig scuaine amháin nó níos mó de réir na rialacha ceangailteacha idir é agus an scuaine
  3. Stórálann an scuaine tagairt don teachtaireacht seo. Stóráiltear an teachtaireacht féin i RAM nó ar dhiosca
  4. Nuair atá an tomhaltóir réidh le teachtaireacht a fháil ón scuaine, cruthaíonn an freastalaí cóip den teachtaireacht tríd an nasc agus seolann sé
  5. Faigheann an tomhaltóir an teachtaireacht agus cuireann sé deimhniú chuig an mbróicéir
  6. Nuair a fhaigheann an bróicéir dearbhú, baineann sé cóip den teachtaireacht as an scuaine. Ansin scriostar as RAM agus diosca

RPC

Процесс RPC (glaoch ar nós imeachta cianda) atá mar bhonn le beagnach gach idirghníomhú leis an núicléas RabbitMQ. Mar shampla, plé tosaigh faoi théarmaí an chliaint le RabbitMQ, léiríonn próiseas áirithe RPC. Nuair a bheidh an seicheamh seo críochnaithe, RabbitMQ réidh le glacadh le hiarratais ón gcliant:

RabbitMQ. Part 1. Réamhrá. Erlang, AMQP

Chomh maith leis sin sa tsonraíocht AMQP is féidir leis an gcliant agus leis an bhfreastalaí orduithe a eisiúint. Ciallaíonn sé seo go bhfuil an cliant ag fanacht le cumarsáid a dhéanamh leis an bhfreastalaí. Is ranganna agus modhanna iad orduithe. Mar shampla, Connection.Start – modh glao Start rang Connection.

Ceangal agus cainéil

Le haghaidh malartú faisnéise den sórt sin idir cliant agus freastalaí, cainéil. Cruthaítear cainéil laistigh de nasc ar leith. Tá gach cainéal scoite amach ó chainéil eile. Sa chás sioncronach, ní féidir an chéad ordú eile a rith go dtí go bhfaightear freagra.

D'fhonn a bheith in ann orduithe a sheoladh go comhthreomhar, caithfidh tú roinnt bealaí a oscailt. Cruthaíonn gach cainéal ar leith Erlang próiseas. Is féidir ilchainéil a bheith ag nasc amháin (chomhoiriúnachta). I gcás gach cainéal tá struchtúir agus rudaí áirithe sa chuimhne. Dá bhrí sin, na bealaí níos mó atá laistigh de nasc, an Úsáideann RabbitMQ níos mó cuimhne a leithéid de cheangal a bhainistiú.

RabbitMQ. Part 1. Réamhrá. Erlang, AMQP

Sampla simplí de nasc agus cainéal a chruthú ag baint úsáide as RabbitMQ.Cliant:

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

Moltar go láidir nasc nua a oscailt do gach oibríocht mar seo beidh costais arda mar thoradh air. Ba cheart go mbeadh cainéil leanúnach freisin, ach is cúis le go leor earráidí prótacail an cainéal a dhúnadh, agus mar sin d'fhéadfadh saolré an chainéil a bheith níos giorra ná saolré an cheangail.

Cá n-úsáidtear RabbitMQ?

I gcomhthéacs na microservices, an prótacal AMQP agus a chur i bhfeidhm i RabbitMQ a úsáidtear go minic le haghaidh idirghníomhaíocht asincrónach idir seirbhísí.

Sa chomhthéacs IIOT prótacal AMQP agus a chur i bhfeidhm i RabbitMQ a úsáidtear le haghaidh malartú sonraí idir freastalaithe (freastalaí-freastalaí). Bain úsáid as an breiseán freisin Breiseán MQTT RabbitMQ atá ina chur i bhfeidhm an phrótacail MQTT chun sonraí a tharchur idir braiteoir agus freastalaí i dtimpeallachtaí ísealluais, ard-latency (tá liosta iomlán de na prótacail tacaithe liostaithe ag suíomh Gréasáin an tionscadail).

Sa chéad alt eile cuirfimid tús le tuiscint níos mine a fháil ar Malartuithe.

tagairtí

Foinse: will.com

Add a comment