RabbitMQ. Del 2. Förstå utbyten

Exchange - växlare eller bytespunkt. Meddelanden skickas till den. Exchange distribuerar meddelandet i en eller flera köer. han dirigerar meddelanden till en kö baserat på skapade länkar (bindings) mellan den och kön.

Exchange är det inte Erlang process. Av skalbarhetsskäl exchange är en sträng (länk till modulen med koden där routinglogiken finns) i den inbyggda databasen minnessjukdom. 1 tusen växlare kommer att förbruka endast 1 MB minne.

innehållsförteckning

  • RabbitMQ. Del 1. Inledning. Erlang, AMQP och RPC
  • RabbitMQ. Del 2. Förstå utbyten
  • RabbitMQ. Del 3. Förstå köer och bindningar
  • RabbitMQ. Del 4. Att hantera vad som är budskap och ramar
  • RabbitMQ. Del 5: Publicera och konsumera meddelandeprestanda
  • RabbitMQ. Del 6. Översikt över Federation och Shovel Modules
  • RabbitMQ. Del 7. Detaljer om Connection och Chanel
  • RabbitMQ. Del 8. RabbitMQ i .NET
  • RabbitMQ. Del 9. Övervakning

Direkt utbyte

Direct exchange - används vid behov leverera ett meddelande till specifika köer. Meddelandet publiceras till växlaren med en specifik routing nyckel och kommer in i alla köer som är associerade med denna växlare med en liknande routingnyckel. Routingnyckeln är en sträng. Matchning görs med hjälp av kontrollera strängar för jämlikhet.

Grafisk representation av meddelandeflödet:

RabbitMQ. Del 2. Förstå utbyten

В rabbitmq det finns ett koncept standardväxlare. Den direct exchange inget namn. Om standardväxlaren används kommer meddelandet att dirigeras till en kö med ett namn lika med nyckel för meddelandedirigering.

Ämnesutbyte

Topic exchange – liknande direct exchange möjliggör selektiv routing genom att jämföra routingnyckeln. Men i det här fallet är nyckeln given efter mall. När du skapar en mall, använd 0 eller fler ord (bokstäver AZ и az och siffror 0-9), separerade med en punkt, samt symboler * и #.

  • * - kan ersättas med exakt 1 слово
  • # - kan ersättas av 0 eller fler ord

Grafisk representation av meddelandeflödet:

RabbitMQ. Del 2. Förstå utbyten

Från version RabbitMQ 2.4.0 routingalgoritm för topic exchange började jobba tills 145 gånger snabbare. De uppnådde detta genom att implementera tillvägagångssättet prova implementering, vilket innebär representation av mallar som en trädstruktur. Till exempel mallar a.b.c, a.*.b.c, a.#.c и b.b.c kommer att representeras av följande struktur:

RabbitMQ. Del 2. Förstå utbyten

Mönstermatchning söks med början från roten och går uppifrån och ned.

Funktioner:

  • användningen av denna växlare kan bli ett bra val för eventuell framtida apputveckling, därför att mallar kan alltid anpassas så att meddelandet publiceras på liknande sätt direct exchange eller fanout exchange
  • mallar som används * mycket snabbareän mallar som använder #.
  • topic exchange långsammare direct exchange

Fanout Exchange

Fanout exchange - alla meddelanden levereras till alla köer även om en routingnyckel anges i meddelandet.

Funktioner:

  • RabbitMQ fungerar inte med routingnycklar och mallar vilket har en positiv effekt på prestationen. Det här är det snabbaste exchange;
  • alla konsumenter måste kunna behandla alla meddelanden;

Grafisk representation av meddelandeflödet:

RabbitMQ. Del 2. Förstå utbyten

Utbyte av rubriker

Headers exchange - dirigerar meddelanden till relaterade köer baserat på en jämförelse av par av (nyckel, värde) egenskaper headers bindande och liknande meddelandeegenskap. headers är en Dictionary<ключ, значение>.

Om du lägger till en speciell nyckel till ordboken x-match med mening any, då dirigeras meddelandet om paren (nyckel, värde) delvis matchar. Detta beteende liknar operatören or.

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

Standardnyckel x-match innehåller ett värde all. Detta innebär att meddelandet dirigeras när paren (nyckel, värde) helt matchar. Detta beteende liknar operatören and.

Grafisk representation av meddelandeflödet:

RabbitMQ. Del 2. Förstå utbyten

Funktioner:

  • ytterligare flexibilitet
  • ytterligare beräkningsoverhead. Alla par (nyckel, värde) av attributet headers måste sorteras efter nyckelnamn innan värden för meddelandedirigering beräknas. Långsammare än andra typer av utbyte.

Konsekvent hashing-utbyte

Denna växlare är plugin и inte inbyggd в RabbitMQ.

Consistent-hashing exchange (hash-konsistent utbyte) - används när det finns flera köer som är potentiella mottagare av ett meddelande och när du behöver ladda balans mellan dem. Meddelandet är associerat med kön efter vikt (ett villkorligt strängvärde från 0 - n).

Motsvarande vikt av köer - indikerar att varje kö kommer att ta emot ungefär lika mycket meddelanden (varje meddelande läggs endast i en kö). Det finns ingen fullständig garanti för enhetlig distribution av meddelanden.

Grafisk representation av meddelandeflödet:

RabbitMQ. Del 2. Förstå utbyten

Hash beräknas baserat på routingnyckel eller egenskap headers meddelanden. Om alla publicerade meddelanden hade olika routingnycklar, eller headers, då kommer fördelningen att ske efter vikt. Annars kommer routingnyckeln att användas, eller headers.

Bör hjälpa när konsumenternas genomströmning behöver växa högre än en lösning med flera konsumenter som använder samma kö.

Kombination av växlare (E2E)

Beteendet hos alla växlare kan kombineras med hjälp av kommunikation Exchange-to-Exchange (kombination av växlare ingår inte i specifikationen AMQP. Detta är en protokollförlängning från sidan RabbitMQ).

Grafisk representation av meddelandeflödet:

RabbitMQ. Del 2. Förstå utbyten

På grund av E2E vi kan hitta rätt skalbar konfiguration som möter både nuvarande och växande krav.

Skapa en Exchange

Värmeväxlaren skapas med hjälp av en synkron RPC begäran till servern. Begäran görs med metoden Exchange.Declareanropas med parametrar:

  • växlarens namn
  • växlare typ
  • andra parametrar

Skapande exempel exchange genom RabbitMQ.Client:

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

  • exchange - namnet på växlaren som vi vill skapa. Namnet måste vara unikt
  • type - typ av växlare
  • durable - om det är installerat true, Sedan exchange kommer att vara permanent. Den kommer att lagras på disk och kommer att kunna överleva en omstart av server/mäklare. Om värdet false, Sedan exchange är tillfälligt och kommer att tas bort när servern/mäklaren startas om
  • autoDelete - automatisk radering. Exchange kommer att raderas när alla associerade köer är raderade
  • arguments är valfria argument. Oftast genom argumenten alternative exchange (alternativ växlare). Om ett meddelande inte kan gå genom den ursprungliga rutten, kan det skickas till en alternativ växel för att dirigeras längs en annan väg.

RabbitMQ. Del 2. Förstå utbyten

Om skapande exchange kanske, då skickar servern klienten en synkron RPC ответ Exchange.DeclareOk. Om skapande är omöjligt (det fanns ett avslag på begäran Exchange.Declare), Den där kanalen stängs server med ett asynkront kommando Channel.Close och kunden får ett undantag OperationInterruptedException, som kommer att innehålla felkoden och dess beskrivning.

En växlare måste skapas innan bokföring. Om du publicerar ett meddelande till någon icke-existerande växlare - RabbitMQ ta bort det tyst.

Skapa ett Exchange GUI

Gå till adminpanelen RabbitMQ under användare guest (Användarnamn: guest och lösenord: guest). Observera att användaren guest kan bara ansluta från localhost. Låt oss nu gå till fliken Exchanges och klicka på Add a new exchange. Fyll i egenskaperna:

RabbitMQ. Del 2. Förstå utbyten

De flesta av fastigheterna har beskrivits ovan. Här noterar vi att om vi ställer in Internal, då kan bytet endast användas för E2E. Producer kommer inte att kunna skicka meddelanden till en sådan växel.

Slutsats

När man utvecklar ett system är det praktiskt att beskriva topologin routing med hjälp av en graf. Men innan du börjar bygga en graf är det värt att markera stigarna med mycket trafik, eftersom. de behöver högre genomströmning (prestanda). Därefter kan du klassificera trafiken. Och sedan börja bygga.

Om det finns i den konstruerade grafen ändlig uppsättning routingnycklar, då är det värt att titta på flera fanout exchange, som är 1:1 relaterade till routingnyckeln. Kom ihåg det fanout exchange den snabbaste.

Om antalet rutter tenderar till oändligheten, det är värt att uppmärksamma topic exchange eller, om mallen inte behövs, då kan du välja direct exchnge, därför att han är snabbare topic exchange.

Kombinationer av olika exchange bör hjälpa dig att hitta rätt. skalbar konfiguration, som uppfyller både nuvarande och växande systemkrav.

Nummer exchange och köerna ska vara minimala jämfört med antalet rutter.

I nästa artikel kommer vi att börja förstå mer om köer och bindningar.

referenser

Källa: will.com

Lägg en kommentar