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:
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
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.
Stutt vinna RabbitMQ má lýsa sem hér segir:
Útgefandinn sendir skilaboð til ákveðins kauphallar
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
Biðröðin geymir tilvísun í þessi skilaboð. Skilaboðin sjálf eru geymd í vinnsluminni eða á diski
Þ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
Neytandi fær skilaboðin og sendir staðfestingu til miðlara
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:
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.
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.