RabbitMQ: meddelelser og asynkrone systemer · Lektion

Spejlede køer til høj tilgængelighed

Implementér spejlede køer for at replikere meddelelser på tværs af flere klyngenoder. Opnå høj tilgængelighed for Deres køer, så meddelelser overlever nodefejl.

Lektion 3 af 411 trin

Spejlede køer til høj tilgængelighed er en gratis RabbitMQ: meddelelser og asynkrone systemer-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i RabbitMQ: meddelelser og asynkrone systemer, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. RabbitMQ: meddelelser og asynkrone systemer-kurset indeholder 4 lektioner i alt.

Introduktion til spejlede køer

I en RabbitMQ-klynge er køer som standard placeret på én node. Hvis denne node svigter, bliver eventuelle meddelelser i dens køer (og selve køerne) utilgængelige, indtil noden er genoprettet.

Spejlede køer løser dette ved at replikere køindhold på tværs af flere noder. Det sikrer høj tilgængelighed (HA) og fejltolerance for dine meddelelser.

Hvorfor bruge spejlede køer?

Forestil dig en kritisk applikation, hvor det er uacceptabelt at miste meddelelser eller opleve nedetid. Spejlede køer giver:

  • Høj tilgængelighed: Hvis noden, der er vært for den primære kø, svigter, kan en replika overtage uden afbrydelse.
  • Datapålidelighed: Meddelelser gemmes på flere noder, hvilket beskytter mod fejl på en enkelt node.
  • Fejltolerance: Systemet kan fortsætte med at fungere, selv hvis nogle noder går offline.

De er afgørende for robuste RabbitMQ-installationer, der er klar til produktion.

Arkitektur med master og replika

Når en kø spejles, er én node vært for masterkøen (eller den primære kø). Alle andre noder, der er vært for spejle, kører replikaer.

Alle handlinger for en spejlet kø (publicering, forbrug og tilføjelse af meddelelser) håndteres først af masteren. Masteren replikerer derefter disse handlinger til alle sine replikaer.

Konfiguration af spejling med politikker

Du konfigurerer ikke spejling direkte på individuelle køer. I stedet bruger du politikker. En politik er et sæt regler, der gælder for køer, hvis navne matcher et bestemt mønster.

Det giver dig mulighed for at definere spejlingsadfærd for mange køer på én gang eller for køer, der oprettes senere, uden at ændre klientkoden.

Politikeksempel: Spejl alle køer

Sådan opretter du en politik med navnet ha-all, der spejler alle køer (som matcher ".*") til alle noder i klyngen ("ha-mode":"all").

Du kører typisk denne kommando på en af RabbitMQ-klyngens noder via kommandolinjen.

rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all"}' --apply-to queues

Forstå indstillingerne for ha-mode

Argumentet ha-mode i en politik definerer, hvordan spejling skal fungere:

  • all: Køen spejles til alle noder i klyngen.
  • exactly: Køen spejles til et bestemt antal noder (f.eks. {"ha-mode":"exactly", "ha-params":2}).
  • nodes: Køen spejles til en bestemt liste over navngivne noder (f.eks. {"ha-mode":"nodes", "ha-params":["rabbit@node1", "rabbit@node2"]}).

Producenter og spejlede køer

Fra en producents perspektiv er det ikke anderledes at arbejde med en spejlet kø end med en kø uden spejling. Klienten opretter forbindelse til en vilkårlig node i klyngen, og RabbitMQ håndterer videresendelsen af meddelelsen til masterkøen med henblik på spejling.

Prøv at køre denne enkle Java-producent:

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 + "'");
    }
  }
}

Forbrugere og spejlede køer

På samme måde har forbrugere ikke brug for særlig logik for at forbruge fra en spejlet kø. De opretter blot forbindelse til en node og abonnerer på køen.

Hvis masterkøen svigter, forfremmer RabbitMQ automatisk en replika til master, og forbrugerne skifter ubemærket til den nye master (selvom det kan være nødvendigt at oprette forbindelse igen kortvarigt).

Kør dette forbrugereksempel:

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 synkronisering af replikaer

Når en masternode svigter, vælger RabbitMQ en ny master blandt de tilgængelige replikaer. Denne nye master overtager, og behandlingen af meddelelser fortsætter uden datatab.

Hvis en node med en replika slutter sig til klyngen igen, eller en ny node føjes til, synkroniserer replikaen sit indhold med den aktuelle master. Det sikrer, at alle meddelelser er ens på tværs af de spejlede køinstanser.

Hurtig kontrol: Spejlede køer

Du har lært om betydningen af og mekanismerne bag spejlede køer. Lad os teste din forståelse.

Opsummering: Spejlede køer til HA

Vi har undersøgt spejlede køer, en vigtig funktion til at sikre høj tilgængelighed og datapålidelighed i RabbitMQ-klynger.

  • Spejlede køer replikerer meddelelser på tværs af master- og replikaknudepunkter.
  • De konfigureres ved hjælp af politikker, som giver fleksibel kontrol over spejlingsadfærden.
  • Klientapplikationer (producenter/forbrugere) arbejder ubemærket med spejlede køer.
  • Hvis en masternode svigter, forfremmes en replika, så tjenesten og meddelelserne forbliver tilgængelige.

Denne mekanisme er afgørende for at bygge robuste og fejltolerante meddelelsessystemer.

Gratis at komme i gang

Lær RabbitMQ: meddelelser og asynkrone systemer med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
11
Lektioner
44

Ofte stillede spørgsmål

Er lektionen “Spejlede køer til høj tilgængelighed” gratis?

Ja — alle 3 lektioner i læringssporet RabbitMQ: meddelelser og asynkrone systemer, inklusive “Spejlede køer til høj tilgængelighed”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. RabbitMQ: meddelelser og asynkrone systemer-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Spejlede køer til høj tilgængelighed”?

Implementér spejlede køer for at replikere meddelelser på tværs af flere klyngenoder. Opnå høj tilgængelighed for Deres køer, så meddelelser overlever nodefejl. Du øver dig i RabbitMQ: meddelelser og asynkrone systemer med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på RabbitMQ: meddelelser og asynkrone systemer?

Der kræves ingen tidligere erfaring. RabbitMQ: meddelelser og asynkrone systemer på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Spejlede køer til høj tilgængelighed”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne RabbitMQ: meddelelser og asynkrone systemer-lektion?

Ja. Alle RabbitMQ: meddelelser og asynkrone systemer-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Koncepter inden for RabbitMQ-klynger
  2. Opsætning af et klyngemiljø
  3. Spejlede køer til høj tilgængelighed
  4. Quorum queues til moderne HA
← Tilbage til RabbitMQ: meddelelser og asynkrone systemer