RabbitMQ. Deel 2. Verstaan ​​uitruilings

Exchange - wisselaar of wisselpunt. Boodskappe word daarheen gestuur. Exchange versprei die boodskap in een of meer toue. Hy stuur boodskappe na 'n tou gebaseer op geskepte skakels (bindings) tussen dit en die tou.

Exchange is nie Erlang proses. Om redes van skaalbaarheid exchange is 'n string ('n skakel na die module met die kode waar die roeteringslogika is) in die ingebedde databasis geheueverlies. 1 duisend wisselaars sal slegs 1 MB geheue verbruik.

Inhoudsopgawe

Direkte ruil

Direct exchange - gebruik wanneer nodig lewer 'n boodskap aan spesifieke toue. Die boodskap word aan die wisselaar gepubliseer met 'n spesifieke roetesleutel en kom in alle rye wat met hierdie wisselaar geassosieer word met 'n soortgelyke roeteringsleutel. Die roetesleutel is 'n string. Pas word gedoen met behulp van stringe vir gelykheid nagaan.

Grafiese voorstelling van die boodskapvloei:

RabbitMQ. Deel 2. Verstaan ​​uitruilings

В rabbitmq daar is 'n konsep verstekwisselaar. Dit direct exchange geen naam. As die verstekwisselaar gebruik word, sal die boodskap na 'n tou gestuur word met 'n naam gelykstaande aan boodskap roetering sleutel.

Onderwerpruil

Topic exchange - soortgelyk direct exchange maak selektiewe roetering moontlik deur die roetesleutel te vergelyk. Maar in hierdie geval word die sleutel gegee volgens sjabloon. Wanneer u 'n sjabloon skep, gebruik 0 of meer woorde (letters AZ и az en getalle 0-9), geskei deur 'n punt, sowel as simbole * и #.

  • * - kan vervang word met presies 1 слово
  • # - kan vervang word deur 0 of meer woorde

Grafiese voorstelling van die boodskapvloei:

RabbitMQ. Deel 2. Verstaan ​​uitruilings

Begin vanaf weergawe RabbitMQ 2.4.0 roeteringsalgoritme vir topic exchange begin werk tot 145 keer vinniger. Hulle het dit bereik deur die benadering te implementeer probeer implementering, wat die voorstelling van sjablone as 'n boomstruktuur impliseer. Byvoorbeeld sjablone a.b.c, a.*.b.c, a.#.c и b.b.c sal deur die volgende struktuur verteenwoordig word:

RabbitMQ. Deel 2. Verstaan ​​uitruilings

Patroonpassing word gesoek vanaf die wortel en gaan van bo na onder.

Kenmerke:

  • die gebruik van hierdie wisselaar kan word 'n goeie keuse vir moontlike toekomstige toepassingsontwikkeling, omdat sjablone kan altyd aangepas word sodat die boodskap op soortgelyke wyse gepubliseer word direct exchange of fanout exchange
  • sjablone wat gebruik word * baie vinnigeras sjablone wat gebruik #.
  • topic exchange stadiger direct exchange

Fanout Exchange

Fanout exchange - alle boodskappe word by alle rye afgelewer selfs al word 'n roeteringsleutel in die boodskap gespesifiseer.

Kenmerke:

  • RabbitMQ werk nie met roetesleutels en sjablone nie wat 'n positiewe uitwerking op prestasie het. Dit is die vinnigste exchange;
  • alle verbruikers moet alle boodskappe kan verwerk;

Grafiese voorstelling van die boodskapvloei:

RabbitMQ. Deel 2. Verstaan ​​uitruilings

Opskrifte omruil

Headers exchange - rig boodskappe na verwante toue gebaseer op vergelyking van pare van (sleutel, waarde) eienskappe headers bindende en soortgelyke boodskap eiendom. headers is a Dictionary<ключ, значение>.

As jy 'n spesiale sleutel by die woordeboek voeg x-match met betekenis any, dan word die boodskap herlei as die pare (sleutel, waarde) gedeeltelik ooreenstem. Hierdie gedrag is soortgelyk aan die operateur or.

var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");

Verstek sleutel x-match 'n waarde bevat all. Dit beteken dat die boodskap herlei word wanneer die pare (sleutel, waarde) heeltemal ooreenstem. Hierdie gedrag is soortgelyk aan die operateur and.

Grafiese voorstelling van die boodskapvloei:

RabbitMQ. Deel 2. Verstaan ​​uitruilings

Kenmerke:

  • bykomende buigsaamheid
  • bykomende berekeningsbokoste. Alle pare (sleutel, waarde) van die kenmerk headers moet volgens sleutelnaam gesorteer word voordat boodskaproeteringwaardes bereken word. Stadiger as ander tipes ruil.

Konsekwente hashing-uitruiling

Hierdie wisselaar is inprop и nie ingebou nie в RabbitMQ.

Consistent-hashing exchange (hash-konsekwente uitruiling) - word gebruik wanneer daar veelvuldige toue is wat potensiële ontvangers van 'n boodskap is en wanneer jy balans tussen hulle moet laai. Die boodskap word geassosieer met die tou volgens gewig ('n voorwaardelike stringwaarde van 0 - n).

Ekwivalente gewig van toue - dui aan dat elke tou sal ontvang ongeveer dieselfde bedrag boodskappe (elke boodskap sal slegs in een tou geplaas word). Daar is geen volledige waarborg vir eenvormige verspreiding van boodskappe nie.

Grafiese voorstelling van die boodskapvloei:

RabbitMQ. Deel 2. Verstaan ​​uitruilings

Hash bereken op grond van roetesleutel of eiendom headers boodskappe. As alle gepubliseerde boodskappe verskillende roetesleutels gehad het, of headers, dan sal die verspreiding volgens gewig plaasvind. Andersins sal die roetesleutel gebruik word, of headers.

Behoort te help wanneer verbruikersdeurset hoër moet groei as 'n oplossing met veelvuldige verbruikers wat dieselfde tou gebruik.

Kombinasie van wisselaars (E2E)

Die gedrag van alle wisselaars kan gekombineer word deur kommunikasie te gebruik Ruil-tot-beurs (kombinasie van wisselaars is nie by die spesifikasie ingesluit nie AMQP. Dit is 'n protokol-uitbreiding van die kant af RabbitMQ).

Grafiese voorstelling van die boodskapvloei:

RabbitMQ. Deel 2. Verstaan ​​uitruilings

Ten koste van die E2E ons kan die regte skaalbare konfigurasie vind wat aan beide huidige en groeiende vereistes voldoen.

Skep 'n Exchange

Die wisselaar word geskep met behulp van 'n sinchroniese RPC versoek aan die bediener. Die versoek word gemaak met behulp van die metode Exchange.Declaregenoem met parameters:

  • ruiler naam
  • tipe wisselaar
  • ander opsies

Skepping voorbeeld exchange Met die hulp van RabbitMQ.Client:

//...
channel.ExchangeDeclare(
    exchange: "my_exchange",
    type: "direct",
    durable: "false",
    autoDelete: "false",
    arguments: null
);
//...

  • exchange - die naam van die wisselaar wat ons wil skep. Naam moet uniek wees
  • type - tipe wisselaar
  • durable - indien geïnstalleer true, Dan exchange permanent sal wees. Dit sal op skyf gestoor word en sal 'n bediener/makelaar herbegin kan oorleef. As die waarde false, Dan exchange is tydelik en sal verwyder word wanneer die bediener/makelaar herbegin word
  • autoDelete - outomatiese verwydering. Exchange sal uitgevee word wanneer alle geassosieerde rye uitgevee is
  • arguments is opsionele argumente. Meestal deur die argumente wat gestel word alternative exchange (alternatiewe wisselaar). As 'n boodskap nie deur die oorspronklike roete kan gaan nie, kan dit na 'n alternatiewe uitruil gestuur word om langs 'n ander pad gestuur te word.

RabbitMQ. Deel 2. Verstaan ​​uitruilings

As skepping exchange miskien, dan sal die bediener die kliënt 'n sinchroniese stuur RPC beantwoord Exchange.DeclareOk. As skepping is onmoontlik (daar was 'n weiering op die versoek Exchange.Declare), dan die kanaal sal toemaak bediener met behulp van 'n asynchrone opdrag Channel.Close en die kliënt sal 'n uitsondering kry OperationInterruptedException, wat die foutkode en sy beskrywing sal bevat.

'n Wisselaar moet geskep word voordat dit gepos word. As jy 'n boodskap aan een of ander nie-bestaande wisselaar publiseer - RabbitMQ verwyder dit stilweg.

Skep 'n Exchange GUI

Gaan na die administrasiepaneel RabbitMQ onder gebruiker guest (gebruikersnaam: guest en wagwoord: guest). Neem asseblief kennis dat die gebruiker guest kan slegs vanaf localhost koppel. Kom ons gaan nou na die blad Exchanges en klik op Add a new exchange. Vul die eienskappe in:

RabbitMQ. Deel 2. Verstaan ​​uitruilings

Die meeste van die eiendomme is hierbo beskryf. Hier let ons op dat as ons stel Internal, dan kan die ruil slegs vir gebruik word E2E. Producer sal nie boodskappe na so 'n beurs kan stuur nie.

Gevolgtrekking

Wanneer 'n stelsel ontwikkel word, is dit gerieflik om die topologie te beskryf roetering met behulp van 'n grafiek. Maar voordat jy 'n grafiek begin bou, is dit die moeite werd om die paaie met hoë verkeer uit te lig, want. hulle vereis hoër deurset (optrede). Vervolgens kan u die verkeer klassifiseer. En begin dan bou.

As daar in die gekonstrueerde grafiek bestaan eindige stel roetesleutels, dan is dit die moeite werd om na verskeie te kyk fanout exchange, wat 1:1 verband hou met die roetesleutel. Onthou dat fanout exchange die vinnigste.

As die aantal roetes neig na oneindig, dit is die moeite werd om aandag aan te gee topic exchange of, as die sjabloon nie nodig is nie, dan kan jy kies direct exchnge, omdat hy is vinniger topic exchange.

Kombinasies van verskeie exchange moet jou help om die regte een te vind. skaalbare konfigurasie, wat aan beide huidige en groeiende stelselvereistes voldoen.

Number exchange en toue moet minimaal wees in vergelyking met die aantal roetes.

In die volgende artikel sal ons meer oor toue en bindings begin verstaan.

verwysings

Bron: will.com

Voeg 'n opmerking