RabbitMQ. 1. hluti. Inngangur. Erlang, AMQP

Góðan daginn, Habr! Mig langar að deila kennslubók-uppflettibók um þekkingu sem ég náði að safna á RabbitMQ og draga saman í stuttar tillögur og ályktanir.

efnisyfirlit

  • RabbitMQ. 1. hluti. Inngangur. Erlang, AMQP og RPC
  • RabbitMQ. Part 2. Skilningur á skiptum
  • RabbitMQ. Hluti 3. Að skilja biðraðir og bindingar
  • RabbitMQ. Hluti 4. Að skilja hvað skilaboð og rammar eru
  • RabbitMQ. Hluti 5: Skilaboðaútgáfa og neysluárangur
  • RabbitMQ. Hluti 6. Endurskoðun Federation og skófla einingar
  • RabbitMQ. Part 7. Upplýsingar um Connection og Chanel
  • RabbitMQ. Part 8. RabbitMQ í .NET
  • RabbitMQ. Hluti 9. Vöktun

Stuttlega um AMQP

AMQP (Advanced Message Queuing Protocol) er opin samskiptaregla til að senda skilaboð á milli kerfishluta. Grunnhugmyndin er sú að einstök undirkerfi (eða óháð forrit) geti skipt á skilaboðum á handahófskenndan hátt í gegnum AMQP miðlara, sem framkvæmir leið, tryggir hugsanlega afhendingu, dreifir gagnastraumum og gerist áskrifandi að þeim skilaboðategundum sem óskað er eftir.

Bókun AMQP kynnir þrjú hugtök:

RabbitMQ. 1. hluti. Inngangur. Erlang, AMQP

  • exchange (skiptipunktur eða skipti) - skilaboð eru send til hans. Skiptipunktur dreifir skilaboðum í einni eða fleiri biðröðum. Hún beinir skilaboðum í biðröð byggt á sköpuðum tengingum (binding) milli hans og biðröðarinnar
  • queue (röð) - gagnauppbygging á diski eða í vinnsluminni sem geymir tengla á skilaboð og gefur afrit af skilaboðum consumers (til neytenda)
  • binding (bindandi) - regla sem segir skiptistöðinni í hvaða biðröð þessi skilaboð eiga að fara

Samskiptareglan keyrir ofan á TCP / IP.

Stuttlega um Erlang

Frumkóði verkefnisins er í geymslunni kl GitHub. Arkitektúr RabbitMQ-þjónn byggt á erlangur og BEAM.

Erlang þróað af fyrirtækinu Ericsson um miðjan níunda áratuginn sem dreift, bilanaþolið, rauntímakerfi fyrir forrit sem krefjast 1980% spenntur. Erlang notað í ýmsum iðnaði og nútíma notkun, s.s. WhatsApp. Þú getur lesið meira í greininni WhatsApp arkitektúr, sem Facebook keypti fyrir 19 milljarða dollara

Stuttlega um RabbitMQ

Kanína MQ er opinn uppspretta skilaboðamiðlari. Það vísar skilaboðum meðfram öllum grundvallarreglum samskiptareglunnar AMQP lýst í forskrift. RabbitMQ útfærir og bætir við bókunina AMQP.

Meginhugmyndin um skilaboðalíkanið í RabbitMQ málið er producer (útgefandi) sendir ekki skilaboð beint í biðröðina. Reyndar, og nokkuð oft, veit útgefandinn ekki einu sinni hvort skilaboðin verða send í einhverja biðröð yfirleitt.

Í staðinn getur útgefandinn aðeins sent skilaboð til kauphallarinnar. Annars vegar tekur stöðin við skilaboðum frá útgefendum og hins vegar sendir hún þau í biðraðir. Miðstöðin verður að vita nákvæmlega hvað á að gera við skilaboðin sem þau fá. Ætti að bæta því við ákveðna biðröð? Ætti að bæta því við margar biðraðir? Eða ætti að hunsa skilaboðin.

RabbitMQ. 1. hluti. Inngangur. Erlang, AMQP

Stutt vinna RabbitMQ má lýsa sem hér segir:

  1. Útgefandinn sendir skilaboð til ákveðins kauphallar
  2. Skipti, sem hefur móttekið skilaboð, beinir því í eina eða fleiri biðraðir í samræmi við bindandi reglur milli þess og biðröðarinnar
  3. Biðröðin geymir tilvísun í þessi skilaboð. Skilaboðin sjálf eru geymd í vinnsluminni eða á diski
  4. Þegar neytandinn er tilbúinn að fá skilaboð úr biðröðinni býr þjónninn til afrit af skilaboðunum í gegnum hlekkinn og sendir
  5. Neytandi fær skilaboðin og sendir staðfestingu til miðlara
  6. Miðlari, þegar hann hefur fengið staðfestingu, fjarlægir afrit af skilaboðunum úr biðröðinni. Eyðir síðan úr vinnsluminni og disknum

CPR

ferlið RPC (fjarkerfiskall) liggur til grundvallar nánast öllum samskiptum við kjarnann RabbitMQ. Til dæmis, fyrstu umræður um kjör viðskiptavinar við RabbitMQ, sýnir ákveðið ferli RPC. Þegar þessari röð er lokið, RabbitMQ mun vera tilbúinn til að samþykkja beiðnir frá viðskiptavini:

RabbitMQ. 1. hluti. Inngangur. Erlang, AMQP

Einnig í forskriftinni AMQP bæði biðlarinn og þjónninn geta gefið út skipanir. Þetta þýðir að viðskiptavinurinn bíður eftir að eiga samskipti við netþjóninn. Skipanir eru flokkar og aðferðir. Til dæmis, Connection.Start – aðferðakall Start bekknum Connection.

Tenging og rásir

Fyrir slík upplýsingaskipti milli viðskiptavinar og netþjóns, sund. Rásir eru búnar til innan sérstök tenging. Hver rás er einangruð frá öðrum rásum. Í samstilltu tilvikinu er ekki hægt að framkvæma næstu skipun fyrr en svar berst.

Til þess að geta sent skipanir samhliða þarf að opna nokkrar rásir. Hver rás skapar sérstaka Erlang ferli. Ein tenging getur haft margar rásir (margföldun). Fyrir hverja rás eru ákveðin mannvirki og hlutir í minni. Því fleiri rásir sem eru innan tengingar, því RabbitMQ notar meira minni að stjórna slíkri tengingu.

RabbitMQ. 1. hluti. Inngangur. Erlang, AMQP

Einfalt dæmi um að búa til tengingu og rás með því að nota 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 
}

Það er eindregið mælt með því að opna nýja tengingu fyrir hverja aðgerð vegna þessa mun leiða til mikils kostnaðar. Rásir ættu líka að vera viðvarandi, en margar samskiptavillur valda því að rásin lokar, þannig að líftími rásarinnar gæti verið styttri en tengingarinnar.

Hvar er RabbitMQ notað?

Í samhengi við örþjónustu, samskiptareglur AMQP og framkvæmd þess í RabbitMQ oft notað fyrir ósamstillt samspil milli þjónustu.

Í samhenginu IIOT bókun AMQP og framkvæmd þess í RabbitMQ notað fyrir gagnaskipti milli netþjóna (miðlara-þjónn). Notaðu einnig viðbótina MQTT Plugin RabbitMQ sem er útfærsla á bókuninni MQTT til að senda gögn á milli skynjara og netþjóns í lághraða umhverfi með mikilli biðtíma (allur listi yfir studdar samskiptareglur er skráður á heimasíðu verkefnisins).

Í næstu grein munum við byrja að skilja kauphallir nánar.

tilvísanir

Heimild: www.habr.com

Bæta við athugasemd