RabbitMQ förklaras på 5 minuter eller mindre

Vi kommer att se idag hur du kan snabba upp laddningstiden för dina sidor genom att utföra den tyngsta behandlingen asynkront, allt hanteras mycket enkelt, tack vare RabbitMQ.

Stabiliteten och hastigheten för en applikation eller webbplats är säkert bland de viktigaste faktorerna för användarna. Vem har aldrig lämnat en webbplats innan ens sett den första sidan eftersom det tog för lång tid?

Vad är RabbitMQ

RabbitMQ är en öppen källkod, distribuerad och skalbar meddelandemäklare som fungerar som en mellanhand för effektiv kommunikation mellan producenter och konsumenter.

RabbitMQ implementerar applikationslagermeddelandeprotokollet AMQP, som är fokuserat på att kommunicera asynkrona meddelanden med leveransgaranti genom bekräftelser på mottagande av meddelanden från mäklaren till producenten och från konsumenterna till producenten.

Hur fungerar RabbitHQ

På ett förenklat sätt definierar RabbitMQ köer som kommer att lagra meddelanden som skickas av producenter tills konsumerande applikationer får meddelandet och bearbetar det. Det tillåter oss att designa och implementera distribuerade system, där ett system är uppdelat i oberoende moduler som kommunicerar med varandra genom meddelanden.

Som all kommunikation behöver vi en producent, ett budskap och en mottagare. I mitten av kakan ligger RabbitMQ, som skulle vara platsen där meddelandet väntar på mottagaren.

Låt oss bättre förstå hur det fungerar genom att veta vilka typer av utbyten som representerar utbyte av meddelanden.

Utbytestyper

Genom utbyten, när vi skickar ett meddelande via RabbitMQ, skickar vi det inte direkt till en kö; för att andra system ska kunna läsa den skickar vi den till en växel som ansvarar för att vidarebefordra meddelanden till olika köer.

Bildkredit: CloudAQMP

Typerna av utbyten är Direct, Fanout, Topic och Readers.

Direkt utbyte

Anta att en producent behöver utfärda ett köpbekräftelsemeddelande till tre konsumenter. Det vill säga att systemet behöver kommunicera med tre andra olika system för att göra köpet.

Eftersom RabbitMQ skickar meddelandet separat till varje kö, finns det fart att få dessa andra system att ta emot meddelandet direkt.

Normalt skickar växeln meddelandet till köerna, men vi vill ofta inte att våra meddelanden ska skickas till alla köer. Därför finns det flera villkor som vi kan tillämpa för att få ett utbyte att fungera.

Så du kan få ditt meddelande skickat till bara en konsument; istället för att skickas till alla.

Bindningsnyckel: För att koppla en kö till en växel måste du skapa en bindning, en relation mellan en kö och en växel, som en koppling.

Routing Key: I denna bindning kan vi också skapa ett element som kallas en routing key, vilket med andra ord är en nyckel för att vidarebefordra våra meddelanden till en specifik kö.

Om du har en routingnyckel X, en routingnyckel Y och en routingnyckel Z, kommer meddelandet med routingnyckel Y, till exempel, att gå genom kö Y och levereras direkt till den konsument som du definierat för att ta emot meddelandet.

På så sätt kan vi ha flera köer kopplade till en växel, men samtidigt kan de också ha olika relationer med växlarna med hjälp av routingnycklarna.

Fanout Exchange

När meddelandet skickas till växeln skickas det till alla köer som är kopplade till den. Så om du har 10 köer kopplade till en fanout-växel kommer alla köer att få meddelandet som skickades.

Ämnesutbyte

Det är en av de mest flexibla utbytena, vilket gör att vi kan skicka meddelanden efter ämne. Och baserat på hur du namnger routingnycklarna är det möjligt att skapa mönster av regler och relationer mellan system.

Till exempel: routingnyckel (x.*); routingnyckel(*.z); routingnyckel (*.y.*).

Vad är AQMP i RabbitMQ

AMQP (Advanced Message Queuing Protocol) är ett öppet meddelandeprotokoll som används för att definiera transporten av meddelanden mellan flera applikationer. Det liknar HTTP- och TCP-protokollen genom att det är ett protokoll på trådnivå, förutom att det tillåter asynkron transport.

RabbitMQ valde att implementera AMQP av flera anledningar. Den första är att detta protokoll beskrivs som en standard för mellanprogram, till skillnad från JMS, som definierar ett API.

Ett internationellt konsortium, inklusive stora företag som Red Hat, Cisco Systems och Microsoft, skrev denna AMQP-specifikation. Det andra är interoperabiliteten för detta protokoll, vilket gör att alla applikationer som implementerar AMQP kan kommunicera med en AMQP-mäklare.

AMQP är inte det enda protokollet som används av RabbitMQ. Bilden nedan representerar alla protokoll, språk och API:er som implementeras och/eller stöds av RabbitMQ.

De bästa funktionerna i RabbitMQ

Förutom att tillåta integrering av olika applikationer genom meddelanden asynkront och från olika platser, erbjuder RabbitMQ oss andra funktioner som har gjort det mycket populärt inom världen av meddelandemäklare:

Tillförlitlig lagring

RabbitMQ innehåller flera funktioner som gör att den kan garantera meddelandeleverans. Bland dessa ger den lagring när inga konsumenter kan ta emot meddelandet. Det tillåter konsumenter att acceptera leveransen av meddelandet för att säkerställa att det har behandlats framgångsrikt.

Om behandlingen misslyckas tillåter RabbitMQ att meddelandet återställs i kö för att konsumeras av en annan instans av konsumenten eller bearbetas igen av samma konsument som initialt misslyckades när det återställs.

RabbitMQ garanterar också leveransordningen av meddelandena; det vill säga de konsumeras i samma ordning som de kom till RabbitMQ-köerna.

Skapande av kluster

Även om RabbitMQ ger bra prestanda genom att bearbeta tusentals meddelanden per sekund, behöver den ibland kunna bearbeta ett större antal meddelanden utan att påverka applikationens prestanda.

För detta tillåter RabbitMQ skapandet av kluster för att skala lösningen horisontellt, vilket är transparent för både producenter och konsumenter.

Mycket tillgängliga köer

I RabbitMQ kan köer replikeras över flera noder i ett kluster, vilket säkerställer att i händelse av ett nodfel eller driftstopp kan mäklaren fortsätta att ta emot meddelanden från producenter och leverera dem till lämpliga konsumenter.

Flexibel routing

I RabbitMQ kan flexibla routingregler definieras, även efter ett visst mönster, för att dirigera meddelanden mellan utbyten och köer, genom bindningar.

Stöd för flera protokoll

Förutom att stödja AMQP-protokollet, stöder RabbitMQ STOMP, MQTT och HTTP via plugins. Den innehåller också autentiserings- och åtkomstkontrollmekanismer för varje mäklares komponenter.

Verkliga användningsfall av RabbitMQ

De viktigaste användningsfallen för RabbitMQ är att möjliggöra garantin för asynkronitet mellan applikationer, minska kopplingen mellan applikationer, distribuera varningar och styra kön av jobb i bakgrunden.

De praktiska användningsfallen för RabbitMQ är dock inom e-handel, där t används för att manipulera, bearbeta och vidarebefordra dina försäljningsorder till system i andra sektorer, såsom distribution och utfärdande av fakturor.

Vid bearbetning av beställningar kan du vidarebefordra ditt säljmeddelande till distributionscentralen och ett fakturaområde. I det här schemat fungerar allt horisontellt, enligt det asynkrona mönstret för att skicka meddelanden, men det är ofta möjligt att skicka en åtgärd till flera köer.

Efter föregående exempel kan denna funktion vara mycket användbar när kunden gör ett köp och produkten ska förberedas för distribution, transport och fakturering.

Och eftersom var och en av dessa sektorer är olika system, är RabbitMQ:s mål att vidarebefordra alla dessa meddelanden till motsvarande system.

Rabbit MQ-alternativ:

RabbitMQ är mycket enklare än det ser ut, och det finns flera alternativ till det som inkluderar:

#1. IronMQ

IronMQ är supersnabb programvara för meddelandeköer. Den är mycket tillgänglig, hållbar i designen och helst för en engångsleverans. IronMQ är den mest kraftfulla molnbaserade lösningen för modern applikationsarkitektur.

Den stöder push-köer, pull-köer och långa omröstningar, vilket håller omröstningsförfrågningar öppna längre. Dessutom kan den använda flera datacenter med hög tillgänglighet, vilket underlättar skalbarhet.

Du kan distribuera i molnet, på delad eller dedikerad hårdvara eller på plats. Den har också en rad klientbibliotek med lättläst dokumentation.

#2. Apache Kafka

Kafka är en plattform med stark närvaro inom distribuerad strömning av evenemang. I sin kärna är Kafka designad som en replikerad, distribuerad, beständig commit-logg.

Dess största användbarhet är händelsedrivna kraftmikrotjänster eller storskaliga strömbehandlingsapplikationer, som automatiskt replikerar händelser asynkront inom klustret till feltolerans och hög tillgänglighet.

#3. Apache ActiveMQ

ActiveMQ är en Java-baserad multiprotokoll Message Broker. Med den kan vi integrera applikationer med AMQP-meddelandeköprotokollet i applikationslagret.

Den implementerar flera protokoll för integration, såsom JMS (native Java) och Stomp (som kan användas av PHP-applikationer), bland annat.

Dessutom har Amazon sin ”hanterade” version som heter Amazon MQ, vilket gör det mycket enklare att använda tjänsten.

Slutord

Meddelandemäklare har traditionellt sett varit en viktig del av organisationers arkitektur. Ändå, med det ökade antalet användare som går in i företagssystem via olika kanaler, behövs produkter som gör att de kan skalas horisontellt till en låg kostnad. Tillåter bearbetning av ett stort antal meddelanden per sekund.

Det är här en ny generation av mäklare, som RabbitMQ, blir mer relevanta i moderna applikationer, som försöker erbjuda höga nivåer av tillgänglighet, tillförlitlighet, interoperabilitet och prestanda till våra kunder.

Du kan också utforska några pålitliga RabbitMQ-värdplattformar för din applikation.