Prynhawn da, Habr! Rwyf am rannu llyfr cyfeirio gwerslyfr o wybodaeth y llwyddais i gasglu arno RabbitMQ ac yn crynhoi yn argymhellion a chasgliadau byr.
Tabl cynnwys
- RabbitMQ. Rhan 1. Rhagymadrodd. Erlang, AMQP a RPC
- RabbitMQ. Rhan 2. Deall Cyfnewidiadau
- RabbitMQ. Rhan 3. Deall Ciwiau a Rhwymiadau
- RabbitMQ. Rhan 4. Deall beth yw negeseuon a fframiau
- RabbitMQ. Rhan 5: Perfformiad Cyhoeddi a Defnyddio Neges
- RabbitMQ. Rhan 6. Trosolwg o'r Ffederasiwn a'r Modiwlau Rhaw
- RabbitMQ. Rhan 7. Manylion am Gysswllt a Chanel
- RabbitMQ. Rhan 8. RabbitMQ yn .NET
- RabbitMQ. Rhan 9. Monitro
Yn fyr am AMQP
Mae AMQP (Protocol Ciwio Neges Uwch) yn brotocol agored ar gyfer trosglwyddo negeseuon rhwng cydrannau system. Y syniad sylfaenol yw y gall is-systemau unigol (neu gymwysiadau annibynnol) gyfnewid negeseuon mewn modd mympwyol trwy frocer AMQP, sy'n perfformio llwybro, o bosibl yn gwarantu danfoniad, yn dosbarthu ffrydiau data, ac yn tanysgrifio i'r mathau o negeseuon a ddymunir.
Protocol AMQP yn cyflwyno tri chysyniad:

exchange(pwynt cyfnewid neu gyfnewid) - anfonir negeseuon ato. Pwynt cyfnewid yn dosbarthu'r neges mewn un neu fwy o giwiau. hi llwybrau negeseuon i giw yn seiliedig ar ddolenni a grëwyd (binding) rhyngddo a'r ciwqueue(ciw) - strwythur data ar ddisg neu mewn RAM sy'n yn storio dolenni i negeseuon ac yn rhoi copïau o negeseuonconsumers(i ddefnyddwyr)binding(rhwymo) — rheol bod yn dweud wrth y pwynt cyfnewid i ba giw y dylai'r negeseuon hyn fynd iddo
Mae'r protocol yn rhedeg ar ei ben .
Yn fyr am Erlang
Mae cod ffynhonnell y prosiect yn y gadwrfa yn . Pensaernïaeth yn seiliedig ar a BEAM.
Erlanga ddatblygwyd gan y cwmniEricssonyng nghanol y 1980au fel system amser real ddosbarthedig sy'n gallu goddef diffygion ar gyfer ceisiadau sy'n gofyn am 99,999% uptime.Erlanga ddefnyddir mewn amrywiol ddiwydiannau a chymwysiadau modern, e.e.
Yn fyr am RabbitMQ
yn frocer negeseuon ffynhonnell agored. Mae'n cyfeirio negeseuon ar hyd holl egwyddorion sylfaenol y protocol a ddisgrifir yn . RabbitMQ gweithredu ac ategu'r protocol AMQP.
Prif syniad y model negeseuon yn RabbitMQ peth yw producer (cyhoeddwr) ddim yn anfon negeseuon yn uniongyrchol i'r ciw. Mewn gwirionedd, ac yn aml iawn, nid yw'r cyhoeddwr hyd yn oed yn gwybod a fydd y neges yn cael ei chyflwyno i unrhyw giw o gwbl.
Yn lle hynny, dim ond i'r gyfnewidfa y gall y cyhoeddwr anfon negeseuon. Ar y naill law, mae'r cyfnewid yn derbyn negeseuon gan gyhoeddwyr, ac ar y llaw arall, mae'n eu hanfon i giwiau. Rhaid i'r cyfnewid wybod yn union beth i'w wneud â'r neges y mae'n ei derbyn. A ddylid ei ychwanegu at giw penodol? A ddylid ei ychwanegu at giwiau lluosog? Neu dylid anwybyddu'r neges.

Gwaith byr RabbitMQ gellir ei ddisgrifio fel a ganlyn:
- Mae'r cyhoeddwr yn anfon neges i gyfnewidfa benodol
- Mae cyfnewid, ar ôl derbyn neges, yn ei gyfeirio i un ciw neu fwy yn unol â'r rheolau rhwymol rhyngddo a'r ciw
- Mae'r ciw yn storio cyfeiriad at y neges hon. Mae'r neges ei hun yn cael ei storio mewn RAM neu ar ddisg
- Unwaith y bydd y defnyddiwr yn barod i dderbyn neges o'r ciw, mae'r gweinydd yn creu copi o'r neges trwy'r ddolen ac yn anfon
- Mae'r defnyddiwr yn derbyn y neges ac yn anfon cadarnhad at y brocer
- Mae'r brocer, ar ôl derbyn cadarnhad, yn tynnu copi o'r neges o'r ciw. Yna dileu o RAM a disg
CPR
proses sydd wrth wraidd bron pob rhyngweithiad â'r cnewyllyn RabbitMQ. Er enghraifft, trafodaethau cychwynnol am delerau'r cleient gyda RabbitMQ, yn dangos proses benodol RPC. Unwaith y bydd y dilyniant hwn wedi'i gwblhau, RabbitMQ yn barod i dderbyn ceisiadau gan y cleient:

Hefyd yn y fanyleb AMQP gall y cleient a'r gweinydd gyhoeddi gorchmynion. Mae hyn yn golygu bod y cleient yn aros i gyfathrebu â'r gweinydd. Dosbarthiadau a dulliau yw gorchmynion. Er enghraifft, Connection.Start - galwad dull Start dosbarth Connection.
Cysylltiad a sianeli
Ar gyfer cyfnewid gwybodaeth o'r fath rhwng cleient a gweinydd, sianeli. Mae sianeli yn cael eu creu o fewn cysylltiad penodol. Mae pob sianel wedi'i hynysu oddi wrth sianeli eraill. Yn yr achos cydamserol, nid yw'n bosibl gweithredu'r gorchymyn nesaf hyd nes y derbynnir ymateb.
Er mwyn gallu anfon gorchmynion yn gyfochrog, mae'n rhaid ichi agor sawl sianel. Mae pob sianel yn creu ar wahân Erlang proses. Gall un cysylltiad fod â sianeli lluosog (). Ar gyfer pob sianel mae rhai strwythurau a gwrthrychau yn y cof. Felly, po fwyaf o sianeli sydd o fewn cysylltiad, y Mae RabbitMQ yn defnyddio mwy o gof i reoli cysylltiad o'r fath.

Enghraifft syml o greu cysylltiad a defnyddio sianel :
// ...
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
}Mae hyn yn cael ei annog yn gryf i beidio ag agor cysylltiad newydd ar gyfer pob gweithrediad bydd yn arwain at gostau uchel. Dylai sianeli hefyd fod yn barhaus, ond mae llawer o wallau protocol yn achosi i'r sianel gau, felly gall oes y sianel fod yn fyrrach nag oes y cysylltiad.
Ble mae RabbitMQ yn cael ei ddefnyddio?
Yng nghyd-destun microservices, y protocol AMQP a'i weithrediad yn RabbitMQ a ddefnyddir yn aml ar gyfer rhyngweithio asyncronig rhwng gwasanaethau.
Yn y cyd-destun IIOT protocol AMQP a'i weithrediad yn RabbitMQ a ddefnyddir ar gyfer cyfnewid data rhwng gweinyddwyr (gweinydd-gweinydd). Defnyddiwch yr ategyn hefyd sy'n gweithredu'r protocol ar gyfer trosglwyddo data rhwng synhwyrydd a gweinydd mewn amgylcheddau cyflym, hwyrni uchel (rhestr lawn o brotocolau a gefnogir yn ).
Yn yr erthygl nesaf byddwn yn dechrau deall Cyfnewid yn fwy manwl.
cyfeiriadau
Ffynhonnell: hab.com
