RabbitMQ. Deel 2. Versteesdemech Austausch

Exchange - Austausch oder Austauschpunkt. Messagen ginn et geschéckt. Exchange verdeelt Message an enger oder méi Schlaangen. Hien routes Messagen op eng Schlaang baséiert op de geschafe Verbindungen (bindings) tëscht him an der Schlaang.

Exchange ass net Erlang Prozess. Aus Skalierbarkeetsgrënn exchange - dëst ass eng Linn (Link op e Modul mat Code wou d'Routing Logik läit) an der agebauter Datebank mnesia. 1 dausend exchangers verbrauchen nëmmen 1MB Erënnerung.

Inhaltsverzeechnes

  • RabbitMQ. Deel 1. Aféierung. Erlang, AMQP und RPC
  • RabbitMQ. Deel 2. Versteesdemech Austausch
  • RabbitMQ. Deel 3. Versteesdemech Schlaangen a Bindungen
  • RabbitMQ. Deel 4. Versteesdemech wat Messagen an Rummen sinn
  • RabbitMQ. Deel 5: Message Verëffentlechung a Konsum Leeschtung
  • RabbitMQ. Deel 6. Iwwerpréiwung vun der Federatioun an Schaufel Moduler
  • RabbitMQ. Deel 7. Detailer iwwert Connection an Chanel
  • RabbitMQ. Deel 8. RabbitMQ an .NET
  • RabbitMQ. Deel 9. Iwwerwachung

Direkten Austausch

Direct exchange - benotzt wann néideg liwweren Message op spezifesch Schlaangen. De Message gëtt zu der exchanger mat engem spezifeschen publizéiert Routing Schlëssel a kritt an all Schlaangen datt zu dësem exchanger mat engem ähnleche Routing Schlëssel verbonne sinn. De Routing Schlëssel ass eng String. Matching gëtt fonnt benotzt Iwwerpréift Strings fir Äquivalenz.

Grafesch Representatioun vum Message Flow:

RabbitMQ. Deel 2. Versteesdemech Austausch

В rabbitmq et gëtt e Konzept Default exchanger. dëst direct exchange kee Numm. Wann d'Default exchanger benotzt gëtt, gëtt de Message zu enger Schlaang mat engem Numm gläichberechtegt Message Routing Schlëssel.

Thema Austausch

Topic exchange - ähnlech direct exchange erméiglecht selektiv Routing andeems Dir de Routingschlëssel vergläicht. Awer an dësem Fall gëtt de Schlëssel uginn no der Schabloun. Wann Dir eng Schabloun erstellt, benotzt 0 oder méi Wierder (Bréiwer AZ и az an Zuelen 0-9), getrennt vun engem Punkt, souwéi Symboler * и #.

  • * - kann duerch genee ersat ginn 1 d 'Wuert
  • # - kann duerch ersat ginn 0 oder méi Wierder

Grafesch Representatioun vum Message Flow:

RabbitMQ. Deel 2. Versteesdemech Austausch

Vun der Versioun un RabbitMQ 2.4.0 Routing Algorithmus fir topic exchange ugefaang ze schaffen bis 145 mol méi séier. Si hunn dëst erreecht andeems se eng Approche agefouert hunn probéieren Ëmsetzung, wat implizéiert Musteren als Bamstruktur duerzestellen. Zum Beispill Templates a.b.c, a.*.b.c, a.#.c и b.b.c wäert duerch déi folgend Struktur vertruede sinn:

RabbitMQ. Deel 2. Versteesdemech Austausch

D'Sich no engem Muster passend gëtt vun der Wuerzel ausgefouert a vun uewe bis ënnen weider.

Features:

  • de Gebrauch vun dëser exchanger kann ginn eng gutt Wiel fir méiglech zukünfteg Entwécklung vun der Applikatioun, well Schabloune kënnen ëmmer personaliséiert ginn, sou datt de Message op déiselwecht Manéier publizéiert gëtt direct exchange oder fanout exchange
  • Schablounen déi benotzt * vill méi séierwéi Templates déi benotzen #.
  • topic exchange méi lues direct exchange

Fanout Exchange

Fanout exchange - all Messagen sinn op all Schlaangen geliwwert och wann e Routing Schlëssel am Message uginn ass.

Features:

  • RabbitMQ funktionnéiert net mat Routingschlësselen a Templates wat e positiven Effekt op d'Produktivitéit huet. Dëst ass déi schnellsten exchange;
  • all Konsument muss fäeg sinn all Messagen ze veraarbechten;

Grafesch Representatioun vum Message Flow:

RabbitMQ. Deel 2. Versteesdemech Austausch

Header Exchange

Headers exchange - routes Messagen op assoziéiert Schlaangen baséiert op Verglach vun (Schlëssel, Wäert) Eegeschafte Puer headers Bindungen an ähnleche Message Eegeschafte. headers ass e Dictionary<ключ, значение>.

Wann Dir e spezielle Schlëssel fir d'Wörterbuch x-match mat Bedeitung any, da gëtt de Message geréckelt wann et en deelweis Match vun (Schlëssel, Wäert) Puer ass. Dëst Verhalen ass ähnlech wéi de Bedreiwer or.

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

Standard Schlëssel x-match enthält de Wäert all. Dëst bedeit datt de Message geréckelt gëtt wann d'(Schlëssel, Wäert) Pairen genau passen. Dëst Verhalen ass ähnlech wéi de Bedreiwer and.

Grafesch Representatioun vum Message Flow:

RabbitMQ. Deel 2. Versteesdemech Austausch

Features:

  • zousätzlech Flexibilitéit
  • zousätzlech Berechnungsoverhead. All (Schlëssel, Wäert) Pairen vun engem Attribut headers muss nom Schlësselnumm zortéiert ginn ier Dir Message Routing Wäerter berechnen. Méi lues wéi aner Austauschtypen.

Konsequent-Hashing Exchange

Dëst exchanger ass astiechen и net agebaut в RabbitMQ.

Consistent-hashing exchange (Austausch mat konsequent Hashing) - benotzt wann et e puer Schlaangen sinn, déi potenziell Empfänger vun engem Message sinn, a wann Dir d'Laascht tëscht hinnen ausbalancéiere musst. D'Verbindung vun engem Message mat der Schlaang geschitt duerch Gewiicht (bedingte Stringwäert vun 0 - n).

Äquivalent Gewiicht vun Schlaangen - weist datt all Schlaang kritt ongeféier déiselwecht Betrag Messagen (all Message gëtt nëmmen an enger Schlaang gesat). Et gëtt keng komplett Garantie fir eenheetlech Verdeelung vu Messagen.

Grafesch Representatioun vum Message Flow:

RabbitMQ. Deel 2. Versteesdemech Austausch

Hash berechent baséiert op Routing Schlëssel oder Propriétéit headers Messagen. Wann all publizéiert Messagen hu verschidde Routing Schlësselen oder headers, da wäert d'Verdeelung duerch Gewiicht geschéien. Soss gëtt de Routing Schlëssel benotzt oder headers.

Sollt hëllefe wann de Konsument Duerchsatz méi héich muss wuessen wéi eng Léisung mat multiple Konsumenten déi eng eenzeg Schlaang benotzen.

Combining exchangers (E2E)

D'Behuele vun all exchangers kann mat Kommunikatioun kombinéiert ginn Exchange-ze-Austausch (Kombinéiere vun exchangers ass net an der Spezifizéierung abegraff AMQP. Dëst ass eng Ausdehnung vum Protokoll vun der Säit RabbitMQ).

Grafesch Representatioun vum Message Flow:

RabbitMQ. Deel 2. Versteesdemech Austausch

Op Käschte vun E2E mir kënnen déi richteg skalierbar Konfiguratioun fannen fir béid aktuell a wuessend Ufuerderungen ze treffen.

Schafen Exchange

D'Schafung vun engem exchanger geschitt Synchron- benotzt RPC Ufro un de Server. D'Ufro gëtt mat der Method gemaach Exchange.Declaregenannt mat Parameteren:

  • exchanger Numm
  • Austausch Typ
  • aner Parameteren

Kreatioun Beispill exchange mat der Hëllef vun RabbitMQ.Client:

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

  • exchange - den Numm vun der exchanger mir wëllen schafen. Den Numm muss eenzegaarteg sinn
  • type - Typ vun exchanger
  • durable - wann installéiert true, dann exchange wäert permanent ginn. Et gëtt op Disk gespäichert a kann e Server / Broker Neistart iwwerliewen. Wann de Wäert false, dann exchange ass temporär a gëtt geläscht wann de Server / Broker nei gestart gëtt
  • autoDelete - automatesch Ewechhuele. Exchange gëtt geläscht wann all Schlaangen verbonne mat et geläscht ginn
  • arguments - fakultativ Argumenter. Meeschtens spezifizéieren se duerch Argumenter alternative exchange (alternativ exchanger). Wann e Message kann net laanscht d'Original Streck reesen, et kann zu engem alternativ exchanger geschéckt ginn laanscht eng aner Wee geschéckt.

RabbitMQ. Deel 2. Versteesdemech Austausch

Wann Kreatioun exchange eventuell, da schéckt de Server dem Client eng Synchron RPC Äntwert Exchange.DeclareOk. Wann Kreatioun ass net méiglech (Demande gouf refuséiert Exchange.Declare), dann de Kanal gëtt zou Server mat engem asynchrone Kommando Channel.Close an de Client kritt eng Ausnam OperationInterruptedException, déi de Feelercode a seng Beschreiwung enthält.

En exchanger muss geschaf ginn ier Messagen Astelle. Wann Dir e Message un e puer net existéierenden Tauscher publizéiert - RabbitMQ wäert et roueg ewechhuelen.

Schafen Exchange iwwer GUI

Gitt an den Admin Panel RabbitMQ ënner Benotzer guest (Benotzernumm: guest a Passwuert: guest). Maacht weg datt de Benotzer guest kann nëmmen aus localhost konnektéieren. Loosst eis elo op d'Tab goen Exchanges a klickt op Add a new exchange. Fëllt d'Eegeschafte aus:

RabbitMQ. Deel 2. Versteesdemech Austausch

Déi meescht vun den Eegeschafte goufen uewen beschriwwen. Hei bemierken mir datt wa mir setzen Internal, da kann den Austausch nëmme benotzt ginn fir E2E. Producer wäert net fäheg sinn Messagen op esou en Austausch ze schécken.

Konklusioun

Wann Dir e System entwéckelt, ass et bequem d'Topologie ze beschreiwen routing mat enger Grafik. Awer ier Dir ufänkt eng Grafik ze bauen, ass et derwäert d'Weeër mat héije Verkéier ze markéieren, well si sinn déi, déi verlaangen méi héijer Débit (Leeschtung). Als nächst kënnt Dir de Verkéier klassifizéieren. An nëmmen dann ufänken ze bauen.

Wann an der konstruéierter Grafik ass finite Set Routing Schlësselen, dann ass et derwäert op e puer ze kucken fanout exchange, déi 1:1 mam Routingschlëssel verbonne sinn. Mir erënneren dat fanout exchange déi schnellsten.

Wann d'Zuel vun routes tendéiert un onendlech, da sollt Dir oppassen topic exchange oder, wann d'Schabloun net néideg ass, kënnt Dir wielen direct exchnge, well hien ass méi séier topic exchange.

Kombinatioune vu verschiddene exchange soll Iech hëllefen déi richteg ze fannen skalierbar Konfiguratioun, déi souwuel aktuell wéi och wuessend Systemfuerderunge entsprécht.

Zuel vu exchange an d'Schlaangen sollen am Verglach zu der Unzuel vun de Strecken minimal sinn.

Am nächsten Artikel wäerte mir ufänken Schlaangen a Bindungen méi am Detail ze verstoen.

Referenze

Source: will.com

Setzt e Commentaire