Speilvendte køer for HA
Implementer speilvendte køer for å replikere meldinger på tvers av flere klyngenoder. Oppnå høy tilgjengelighet for køene, slik at meldingene overlever nodefeil.
Speilvendte køer for HA er en gratis leksjon i RabbitMQ-meldinger og asynkrone systemer på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i RabbitMQ-meldinger og asynkrone systemer, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i RabbitMQ-meldinger og asynkrone systemer inneholder totalt 4 leksjoner.
Introduksjon til speilvendte køer
I en RabbitMQ-klynge ligger køer som standard på én enkelt node. Hvis denne noden svikter, blir alle meldinger i køene (og selve køene) utilgjengelige til noden er tilbake.
Speilvendte køer løser dette ved å replikere køinnholdet på tvers av flere noder. Dette sikrer høy tilgjengelighet (HA) og feiltoleranse for meldingene dine.
Hvorfor bruke speilvendte køer?
Se for deg en kritisk applikasjon der det er uakseptabelt å miste meldinger eller oppleve nedetid. Speilvendte køer gir:
- Høy tilgjengelighet: Hvis noden som er vert for primærkøen svikter, kan en replika overta uten avbrudd.
- Databestandighet: Meldinger lagres på flere noder, noe som beskytter mot feil på én enkelt node.
- Feiltoleranse: Systemet kan fortsette å fungere selv om enkelte noder går offline.
De er avgjørende for robuste RabbitMQ-distribusjoner som er klare for produksjon.
Arkitektur med master og replika
Når en kø speilvendes, er én node vert for masterkøen (eller primærkøen). Alle andre noder som er vert for speil, kjører replikaer.
Alle operasjoner for en speilvendt kø (publisering, konsumering og tillegging av meldinger) håndteres først av masteren. Masteren replikerer deretter disse operasjonene til alle replikaene sine.
Konfigurere speiling med policyer
Du konfigurerer ikke speiling direkte på individuelle køer. I stedet bruker du policyer. En policy er et sett med regler som gjelder for køer med navn som samsvarer med et bestemt mønster.
Dette lar deg definere speilatferd for mange køer samtidig, eller for køer som opprettes senere, uten å endre klientkoden.
Policyeksempel: Speilvend alle køer
Slik oppretter du en policy med navnet ha-all som speilvender alle køer (som samsvarer med ".*") til alle noder i klyngen ("ha-mode":"all").
Vanligvis kjører du denne kommandoen på én av RabbitMQ-klyngenodene via kommandolinjen.
rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all"}' --apply-to queuesForstå alternativene for ha-mode
Argumentet ha-mode i en policy definerer hvordan speiling skal fungere:
all: Køen speilvendes til alle noder i klyngen.exactly: Køen speilvendes til et bestemt antall noder (for eksempel{"ha-mode":"exactly", "ha-params":2}).nodes: Køen speilvendes til en bestemt liste over navngitte noder (for eksempel{"ha-mode":"nodes", "ha-params":["rabbit@node1", "rabbit@node2"]}).
Produsenter og speilvendte køer
Fra produsentens perspektiv er det ikke annerledes å samhandle med en speilvendt kø enn med en kø som ikke er speilvendt. Klienten kobler seg til en hvilken som helst node i klyngen, og RabbitMQ sørger for å rute meldingen til masterkøen for speiling.
Prøv å kjøre denne enkle Java-produsenten:
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
public class Producer {
private final static String QUEUE_NAME = "my_mirrored_queue";
public static void main(String[] argv) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost"); // Connect to any cluster node
try (Connection connection = factory.newConnection();
Channel channel = connection.createChannel()) {
// Declare a durable queue (important for mirrored queues)
channel.queueDeclare(QUEUE_NAME, true, false, false, null);
String message = "Hello, Mirrored Queue!";
channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
System.out.println(" [x] Sent '" + message + "'");
}
}
}Konsumenter og speilvendte køer
Tilsvarende trenger ikke konsumenter særskilt logikk for å konsumere fra en speilvendt kø. De kobler seg ganske enkelt til en node og abonnerer på køen.
Hvis masterkøen svikter, gjør RabbitMQ automatisk en replika til master, og konsumentene bytter gjennomsiktig til den nye masteren (selv om det kan være nødvendig å koble til på nytt).
Kjør dette konsumenteksempelet:
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;
public class Consumer {
private final static String QUEUE_NAME = "my_mirrored_queue";
public static void main(String[] argv) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost"); // Connect to any cluster node
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, true, false, false, null);
System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
String message = new String(delivery.getBody(), "UTF-8");
System.out.println(" [x] Received '" + message + "'");
};
// Basic consume with auto-acknowledgement
channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> {});
}
}Failover og replikasynkronisering
Når en masternode svikter, velger RabbitMQ en ny master blant de tilgjengelige replikaene. Den nye masteren overtar, og meldingsbehandlingen fortsetter uten tap av data.
Hvis en node med en replika kobler seg til klyngen igjen, eller en ny node legges til, synkroniserer replikaen innholdet sitt med den gjeldende masteren. Dette sikrer at alle meldinger er konsistente på tvers av de speilvendte køforekomstene.
Rask kontroll: Speilvendte køer
Du har lært om betydningen av og mekanismene bak speilvendte køer. La oss teste forståelsen din.
Oppsummering: Speilvendte køer for HA
Vi har sett på speilvendte køer, en viktig funksjon for å sikre høy tilgjengelighet og databestandighet i RabbitMQ-klynger.
- Speilvendte køer replikerer meldinger på tvers av master- og replikoder.
- De konfigureres ved hjelp av policyer, noe som gir fleksibel kontroll over speilatferden.
- Klientapplikasjoner (produsenter/konsumenter) samhandler transparent med speilvendte køer.
- Hvis en masternode svikter, forfremmes en replika, slik at tjenesten fortsetter og meldingene er beskyttet.
Denne mekanismen er avgjørende for å bygge robuste og feiltolerante meldingssystemer.
Lær deg RabbitMQ-meldinger og asynkrone systemer med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 11
- Leksjoner
- 44
Ofte stilte spørsmål
Er leksjonen «Speilvendte køer for HA» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien RabbitMQ-meldinger og asynkrone systemer, inkludert «Speilvendte køer for HA», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i RabbitMQ-meldinger og asynkrone systemer inneholder totalt 4 leksjoner.
Hva lærer jeg i «Speilvendte køer for HA»?
Implementer speilvendte køer for å replikere meldinger på tvers av flere klyngenoder. Oppnå høy tilgjengelighet for køene, slik at meldingene overlever nodefeil. Du øver på RabbitMQ-meldinger og asynkrone systemer med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med RabbitMQ-meldinger og asynkrone systemer?
Ingen tidligere erfaring er nødvendig. RabbitMQ-meldinger og asynkrone systemer på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Speilvendte køer for HA»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne RabbitMQ-meldinger og asynkrone systemer-leksjonen?
Ja. Alle RabbitMQ-meldinger og asynkrone systemer-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Konsepter innen RabbitMQ-klynging
- Sette opp et klynget miljø
- Speilvendte køer for HA
- Quorum-køer for moderne HA