RabbitMQ. Diel 2. Understanding Exchanges

Exchange - exchanger of wikselpunt. Berjochten wurde stjoerd nei it. Exchange ferspraat it berjocht yn ien of mear wachtrigen. Hy stjoert berjochten nei in wachtrige basearre op oanmakke keppelings (bindings) tusken it en de wachtrige.

Exchange is net Erlang proses. Om redenen fan skalberens exchange is in tekenrige (keppeling nei de module mei de koade wêr't de routinglogika leit) yn 'e ynboude databank mnesia. 1 tûzen exchangers sille konsumearje mar 1MB ûnthâld.

Ynhâldsopjefte

Direkte útwikseling

Direct exchange - brûkt as nedich leverje in berjocht oan spesifike wachtrigen. It berjocht wurdt publisearre oan de exchanger mei in spesifike routing kaai en komt yn alle wachtrijen dy't yn ferbân brocht mei dizze exchanger mei in ferlykbere routing kaai. De rûtekaai is in tekenrige. Matching wurdt dien mei help kontrolearje snaren foar gelikensens.

Grafyske werjefte fan de berjochtstream:

RabbitMQ. Diel 2. Understanding Exchanges

В rabbitmq der is in konsept standert exchanger. Dizze direct exchange gjin namme. As de standert útwikseler wurdt brûkt, dan wurdt it berjocht trochstjoerd nei in wachtrige mei in namme gelyk oan berjocht routing kaai.

Underwerp Exchange

Topic exchange - lyksoartige direct exchange makket selektive routing mooglik troch de routing-kaai te fergelykjen. Mar yn dit gefal wurdt de kaai jûn troch sjabloan. By it meitsjen fan in sjabloan, brûk 0 of mear wurden (letters AZ и az en nûmers 0-9), skieden troch in punt, lykas symboalen * и #.

  • * - kin wurde ferfongen troch krekt 1 it wurd
  • # - kin wurde ferfongen troch 0 of mear wurden

Grafyske werjefte fan de berjochtstream:

RabbitMQ. Diel 2. Understanding Exchanges

Begjinnend fan ferzje RabbitMQ 2.4.0 routing algoritme foar topic exchange begûn te wurkjen oant 145 kear flugger. Dat hawwe se berikt troch de oanpak yn te fieren besykje útfiering, wat de fertsjintwurdiging fan sjabloanen as in beamstruktuer ymplisearret. Bygelyks sjabloanen a.b.c, a.*.b.c, a.#.c и b.b.c sil wurde fertsjintwurdige troch de folgjende struktuer:

RabbitMQ. Diel 2. Understanding Exchanges

Patroan oerienkomst wurdt socht begjinnend fan 'e root en gean fan boppe nei ûnderen.

Features:

  • it brûken fan dizze exchanger kin wurde in goede kar foar mooglike takomstige app-ûntwikkeling, omdat sjabloanen kinne altyd oanpast wurde sadat it berjocht op deselde manier publisearre wurdt direct exchange of fanout exchange
  • sjabloanen dy't brûke * folle fluggerdan sjabloanen dy't brûke #.
  • topic exchange stadiger direct exchange

Fanout Exchange

Fanout exchange - alle berjochten wurde levere oan alle wachtrigen sels as in routing kaai is oantsjutte yn it berjocht.

Features:

  • RabbitMQ wurket net mei routing kaaien en sjabloanen dat hat in posityf effekt op prestaasjes. Dit is de fluchste exchange;
  • alle konsuminten moatte alle berjochten ferwurkje kinne;

Grafyske werjefte fan de berjochtstream:

RabbitMQ. Diel 2. Understanding Exchanges

Headers Exchange

Headers exchange - rjochtet berjochten nei relatearre wachtrigen basearre op fergeliking fan pearen fan (kaai, wearde) eigenskippen headers binend en ferlykber berjocht eigendom. headers is in a Dictionary<ключ, значение>.

As jo ​​in spesjale kaai taheakje oan it wurdboek x-match mei de betsjutting any, dan wurdt it berjocht trochstjoerd as de pearen (kaai, wearde) foar in part oerienkomme. Dit gedrach is fergelykber mei de operator or.

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

Standert kaai x-match befettet in wearde all. Dit betsjut dat it berjocht trochstjoerd wurdt as de pearen (kaai, wearde) folslein oerienkomme. Dit gedrach is fergelykber mei de operator and.

Grafyske werjefte fan de berjochtstream:

RabbitMQ. Diel 2. Understanding Exchanges

Features:

  • ekstra fleksibiliteit
  • ekstra computational overhead. Alle pearen (kaai, wearde) fan it attribút headers moat wurde sortearre op kaai namme foar it berekkenjen fan berjocht routing wearden. Stadiger as oare soarten útwikseling.

Konsekwint Hashing Exchange

Dizze útwikseler is ynstekke и net ynboud в RabbitMQ.

Consistent-hashing exchange (hash-konsistente útwikseling) - brûkt as d'r meardere wachtrigen binne dy't potinsjele ûntfangers binne fan in berjocht en as jo it lykwicht tusken har moatte laden. It berjocht is assosjearre mei de wachtrige troch gewicht (in betingste tekenrige wearde fan 0 - n).

Ekwivalint gewicht fan wachtrigen - jout oan dat elke wachtrige sil ûntfange oer itselde bedrach berjochten (elk berjocht sil yn mar ien wachtrige wurde pleatst). D'r is gjin folsleine garânsje foar unifoarme ferdieling fan berjochten.

Grafyske werjefte fan de berjochtstream:

RabbitMQ. Diel 2. Understanding Exchanges

Hash berekkene basearre op routing kaai of eigendom headers berjochten. As alle publisearre berjochten hie ferskillende routing kaaien, of headers, dan sil de ferdieling plakfine troch gewicht. Oars sil de rûtekaai brûkt wurde, of headers.

Moat helpe as konsumint trochfier heger moat groeie dan in oplossing mei meardere konsuminten dy't deselde wachtrige brûke.

Kombinaasje fan útwikselers (E2E)

It gedrach fan alle exchangers kin wurde kombinearre mei help fan kommunikaasje Exchange-to-Exchange (kombinaasje fan exchangers is net opnommen yn 'e spesifikaasje AMQP. Dit is in protokol-útwreiding fan 'e kant RabbitMQ).

Grafyske werjefte fan de berjochtstream:

RabbitMQ. Diel 2. Understanding Exchanges

Op kosten fan E2E wy kinne fine it rjocht scalable konfiguraasje dy't foldocht oan sawol aktuele en groeiende easken.

Meitsje in Exchange

De exchanger wurdt makke mei help fan in syngroane RPC fersyk oan de tsjinner. It fersyk wurdt makke mei de metoade Exchange.Declare, neamd mei parameters:

  • exchanger namme
  • exchanger type
  • oare opsjes

Foarbyld fan skepping exchange mei help RabbitMQ.Client:

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

  • exchange - de namme fan 'e útwikseler dy't wy wolle oanmeitsje. Namme moat unyk wêze
  • type - type exchanger
  • durable - as ynstallearre true, dan exchange sil permanint wêze. It sil wurde opslein op skiif en sil by steat wêze om te oerlibje in tsjinner / makelder opnij starte. As de wearde false, dan exchange is tydlik en sil fuortsmiten wurde as de tsjinner / makelder wurdt opnij starte
  • autoDelete - automatyske wiskjen. Exchange sil wiske wurde as alle assosjearre wachtrigen wurde wiske
  • arguments binne opsjonele arguminten. Meast faak, troch de arguminten set alternative exchange (alternative exchanger). As in berjocht net troch de orizjinele rûte kin gean, kin it stjoerd wurde nei in alternatyf útwikseling om troch in oar paad te rinnen.

RabbitMQ. Diel 2. Understanding Exchanges

As skepping exchange mooglik, dan sil de tsjinner de kliïnt in syngroane stjoere RPC antwurd Exchange.DeclareOk. As skepping is ûnmooglik (d'r wie in wegering op it fersyk Exchange.Declare), dan it kanaal sil slute tsjinner mei in asynchrone kommando Channel.Close en de kliïnt sil in útsûndering krije OperationInterruptedException, dy't de flaterkoade en de beskriuwing dêrfan sil befetsje.

In exchanger moat wurde makke foar it pleatsen. As jo ​​​​in berjocht publisearje oan ien of oare net-besteande útwikseler - RabbitMQ wiskje it stil.

Meitsje in Exchange GUI

Gean nei it adminpaniel RabbitMQ ûnder brûker guest (brûkersnamme: guest en wachtwurd: guest). Tink derom dat de brûker guest kin allinich ferbine fan localhost. Litte wy no nei it ljepblêd gean Exchanges en klikje op Add a new exchange. Folje de eigenskippen yn:

RabbitMQ. Diel 2. Understanding Exchanges

De measte eigenskippen binne hjirboppe beskreaun. Hjir merken wy op dat as wy ynstelle Internal, dan kin de útwikseling allinnich brûkt wurde foar E2E. Producer sil gjin berjochten ferstjoere kinne nei sa'n útwikseling.

konklúzje

By it ûntwikkeljen fan in systeem is it handich om de topology te beskriuwen routing mei help fan in grafyk. Mar foardat jo begjinne mei it bouwen fan in grafyk, is it wurdich om de paden mei hege ferkear te markearjen, om't. sy fereaskje hegere trochslach (optreden). Dêrnei kinne jo it ferkear klassifisearje. En dan begjinne te bouwen.

As yn 'e konstruearre grafyk bestiet einige set routing kaaien, dan is it wurdich sjen nei ferskate fanout exchange, dy't 1:1 relatearre binne oan de rûtekaai. Ûnthâld dat fanout exchange de fluchste.

As it oantal rûtes tend to infinity, it is it wurdich omtinken te jaan topic exchange of, as it sjabloan net nedich is, dan kinne jo kieze direct exchnge, omdat hy is flugger topic exchange.

Kombinaasjes fan ferskate exchange moat jo helpe om de juste te finen. scalable konfiguraasje, dy't foldocht oan sawol hjoeddeistige as groeiende systeemeasken.

Oantal fan exchange en wachtrijen moatte minimaal wêze yn ferliking mei it oantal rûtes.

Yn it folgjende artikel sille wy begjinne mear te begripen oer wachtrijen en bindingen.

referinsjes

Boarne: www.habr.com

Add a comment