RabbitMQ-berichten en asynchrone systemen · Les

Gespiegelde wachtrijen voor HA

Implementeer gespiegelde wachtrijen om berichten over meerdere clusternodes te repliceren. Bereik hoge beschikbaarheid voor uw wachtrijen en zorg dat berichten node-uitval overleven.

Les 3 van 411 stappen

Gespiegelde wachtrijen voor HA is een gratis RabbitMQ-berichten en asynchrone systemen-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject RabbitMQ-berichten en asynchrone systemen. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus RabbitMQ-berichten en asynchrone systemen bevat in totaal 4 lessen.

Introductie tot gespiegeld wachtrijen

In een RabbitMQ-cluster bevinden wachtrijen zich standaard op één node. Als die node uitvalt, worden alle berichten in de wachtrijen (en de wachtrijen zelf) onbeschikbaar totdat de node is hersteld.

Gespiegelde wachtrijen lossen dit op door de inhoud van wachtrijen over meerdere nodes te repliceren. Zo krijgen je berichten een hoge beschikbaarheid (HA) en fouttolerantie.

Waarom gespiegeld wachtrijen gebruiken?

Stel je een kritieke toepassing voor waarbij het verlies van berichten of downtime onaanvaardbaar is. Gespiegelde wachtrijen bieden:

  • Hoge beschikbaarheid: Als de node waarop de primaire wachtrij staat uitvalt, kan een replica de taken naadloos overnemen.
  • Duurzaamheid van gegevens: Berichten worden op meerdere nodes opgeslagen, zodat ze beschermd zijn tegen storingen van één node.
  • Fouttolerantie: Het systeem kan blijven werken, zelfs als sommige nodes offline gaan.

Ze zijn essentieel voor robuuste RabbitMQ-implementaties voor productie.

Architectuur met master en replica

Wanneer een wachtrij wordt gespiegeld, host één node de master (of primaire) wachtrij. Alle andere nodes waarop mirrors staan, voeren replica's uit.

Alle bewerkingen voor een gespiegeld wachtrij (publiceren, consumeren en berichten toevoegen) worden eerst door de master verwerkt. De master repliceert deze bewerkingen vervolgens naar al zijn replica's.

Spiegelen configureren met beleidsregels

Je configureert spiegelen niet rechtstreeks op afzonderlijke wachtrijen. In plaats daarvan gebruik je beleidsregels. Een beleidsregel is een verzameling regels die van toepassing is op wachtrijen waarvan de naam overeenkomt met een specifiek patroon.

Zo kun je het spiegelgedrag in één keer voor veel wachtrijen definiëren, of voor wachtrijen die later worden aangemaakt, zonder clientcode aan te passen.

Voorbeeld van een beleidsregel: alle wachtrijen spiegelen

Zo maak je een beleidsregel met de naam ha-all die alle wachtrijen (overeenkomstig met ".*") naar alle nodes in het cluster spiegelt ("ha-mode":"all").

Je voert deze opdracht doorgaans via de opdrachtregel uit op een van de RabbitMQ-clusternodes.

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

De opties van ha-mode begrijpen

Het argument ha-mode in een beleidsregel bepaalt hoe het spiegelen werkt:

  • all: De wachtrij wordt naar alle nodes in het cluster gespiegeld.
  • exactly: De wachtrij wordt naar een specifiek aantal nodes gespiegeld (bijvoorbeeld {"ha-mode":"exactly", "ha-params":2}).
  • nodes: De wachtrij wordt naar een specifieke lijst met benoemde nodes gespiegeld (bijvoorbeeld {"ha-mode":"nodes", "ha-params":["rabbit@node1", "rabbit@node2"]}).

Producenten en gespiegeld wachtrijen

Voor een producent verschilt de interactie met een gespiegeld wachtrij niet van die met een niet-gespiegeld wachtrij. De client maakt verbinding met een willekeurige node in het cluster en RabbitMQ zorgt ervoor dat het bericht naar de masterwachtrij wordt gerouteerd om te worden gespiegeld.

Probeer deze eenvoudige Java-producent uit te voeren:

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

Consumers en gespiegeld wachtrijen

Ook consumers hebben geen speciale logica nodig om berichten uit een gespiegeld wachtrij te consumeren. Ze maken gewoon verbinding met een node en abonneren zich op de wachtrij.

Als de masterwachtrij uitvalt, promoveert RabbitMQ automatisch een replica tot master en schakelen consumers transparant over naar de nieuwe master (mogelijk is kort opnieuw verbinden nodig).

Voer dit consumer-voorbeeld uit:

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 en synchronisatie van replica's

Wanneer een masternode uitvalt, kiest RabbitMQ een nieuwe master uit de beschikbare replica's. Deze nieuwe master neemt het over en de verwerking van berichten gaat door zonder gegevensverlies.

Als een node met een replica opnieuw lid wordt van het cluster, of als een nieuwe node wordt toegevoegd, synchroniseert de replica de inhoud met de huidige master. Zo blijven alle berichten consistent in de gespiegeld wachtrij-instanties.

Korte controle: gespiegeld wachtrijen

Je hebt geleerd waarom gespiegeld wachtrijen belangrijk zijn en hoe ze werken. Laten we je begrip testen.

Samenvatting: gespiegeld wachtrijen voor HA

We hebben gespiegeld wachtrijen verkend, een belangrijke functie om hoge beschikbaarheid en duurzaamheid van gegevens in RabbitMQ-clusters te garanderen.

  • Gespiegelde wachtrijen repliceren berichten over master- en replicanodes.
  • Ze worden geconfigureerd met beleidsregels, waarmee je het spiegelgedrag flexibel kunt regelen.
  • Clienttoepassingen (producenten en consumers) werken transparant met gespiegeld wachtrijen.
  • Bij een storing van de masternode wordt een replica gepromoveerd, zodat de dienstverlening en berichtveiligheid behouden blijven.

Dit mechanisme is essentieel voor het bouwen van robuuste, fouttolerante berichtsystemen.

Gratis beginnen

Leer RabbitMQ-berichten en asynchrone systemen met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
11
Lessen
44

Veelgestelde vragen

Is de les “Gespiegelde wachtrijen voor HA” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad RabbitMQ-berichten en asynchrone systemen, waaronder “Gespiegelde wachtrijen voor HA”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus RabbitMQ-berichten en asynchrone systemen bevat in totaal 4 lessen.

Wat leer ik in “Gespiegelde wachtrijen voor HA”?

Implementeer gespiegelde wachtrijen om berichten over meerdere clusternodes te repliceren. Bereik hoge beschikbaarheid voor uw wachtrijen en zorg dat berichten node-uitval overleven. Je oefent met RabbitMQ-berichten en asynchrone systemen door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met RabbitMQ-berichten en asynchrone systemen te beginnen?

Ervaring vooraf is niet nodig. RabbitMQ-berichten en asynchrone systemen op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Gespiegelde wachtrijen voor HA”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over RabbitMQ-berichten en asynchrone systemen?

Ja. Elke les over RabbitMQ-berichten en asynchrone systemen bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Concepten van RabbitMQ-clustering
  2. Een geclusterde omgeving opzetten
  3. Gespiegelde wachtrijen voor HA
  4. Quorum queues voor moderne HA
← Terug naar RabbitMQ-berichten en asynchrone systemen