RabbitMQ-berichten en asynchrone systemen · Les

Het Outbox-patrocol voor betrouwbare publicatie

Leer het transactionele outbox-patroon om bedrijfsstatus en uitgaande berichten atomair vast te leggen en zo het dual-writeprobleem in eventgedreven systemen te elimineren.

Les 4 van 413 stappen

Het Outbox-patrocol voor betrouwbare publicatie is een gratis RabbitMQ-berichten en asynchrone systemen-les op CoddyKit. Dit is les 4 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.

Het probleem van dubbel schrijven

Opslaan in een database en publiceren naar RabbitMQ zijn twee afzonderlijke bewerkingen. Als de ene slaagt en de andere mislukt, lopen je status en je gebeurtenissen uiteen.

Dit is het probleem van dubbel schrijven.

Wat is het outboxpatroon?

Het outboxpatroon schrijft de bedrijfswijziging en het uitgaande bericht weg in dezelfde databasetransactie en publiceert het bericht vervolgens asynchroon vanuit de outboxtabel.

De outboxtabel

Maak een tabel die openstaande berichten naast je domeingegevens opslaat.

CREATE TABLE outbox (
  id UUID PRIMARY KEY,
  payload JSONB,
  published BOOLEAN DEFAULT FALSE,
  created_at TIMESTAMPTZ DEFAULT now()
);

Atomair schrijven

Werk in één transactie de bedrijfsrij bij en voeg de outboxrij toe. Of beide wijzigingen worden vastgelegd, of geen van beide.

BEGIN;
INSERT INTO orders (id, status) VALUES ('42', 'paid');
INSERT INTO outbox (id, payload) VALUES (gen_random_uuid(), '{"order":"42"}');
COMMIT;

Het relaisproces

Een afzonderlijk relais (of berichtenverdeler) zoekt in de outboxtabel naar nog niet gepubliceerde rijen, publiceert ze naar RabbitMQ en markeert ze als gepubliceerd.

De outboxtabel periodiek uitlezen

Het relais selecteert openstaande rijen op volgorde en publiceert ze één voor één.

SELECT id, payload FROM outbox WHERE published = FALSE ORDER BY created_at;

Levering minstens één keer

Als het relais crasht nadat het bericht is gepubliceerd maar voordat de rij is gemarkeerd, publiceert het bericht dit opnieuw bij het opstarten. Daarom moeten consumenten idempotent zijn om dubbele berichten te kunnen verdragen.

Alternatief: wijzigingen in gegevens vastleggen

In plaats van periodiek te peilen lezen hulpmiddelen zoals Debezium het write-ahead-logboek van de database uit en sturen ze toevoegingen aan de outboxtabel door naar RabbitMQ, waardoor latentie en belasting afnemen.

Combineren met bevestigingen

Het relais moet bevestigingen van de uitgever gebruiken, zodat het een rij pas als gepubliceerd markeert nadat de broker het bericht heeft bevestigd. Zo wordt het venster waarin een bericht verloren kan gaan gesloten.

Outbox en saga

De outbox garandeert dat één service zijn gebeurtenissen betrouwbaar verstuurt. Een saga coördineert een werkstroom over meerdere services. Ze vullen elkaar aan: elke stap van een saga kan via zijn eigen outbox publiceren.

Opruimen en bewaren

  • Verwijder of archiveer gepubliceerde rijen regelmatig
  • Maak een index op published voor snel uitlezen
  • Houd de achterstand van het relais in de gaten om stilgevallen processen vroeg te signaleren

Korte controle

Toets je begrip van outboxpatronen.

Samenvatting

Het outboxpatroon slaat uitgaande berichten op in dezelfde transactie als bedrijfsgegevens. Vervolgens publiceert een relais ze asynchroon naar RabbitMQ.

Het elimineert het probleem van dubbel schrijven, vereist idempotente consumenten vanwege levering minstens één keer en werkt goed samen met bevestigingen van uitgevers en saga's.

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 “Het Outbox-patrocol voor betrouwbare publicatie” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad RabbitMQ-berichten en asynchrone systemen, waaronder “Het Outbox-patrocol voor betrouwbare publicatie”, 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 “Het Outbox-patrocol voor betrouwbare publicatie”?

Leer het transactionele outbox-patroon om bedrijfsstatus en uitgaande berichten atomair vast te leggen en zo het dual-writeprobleem in eventgedreven systemen te elimineren. 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 4 van 4.

Hoe lang duurt de les “Het Outbox-patrocol voor betrouwbare publicatie”?

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. Idempotentie bij berichtverwerking
  2. Saga-patroon met RabbitMQ
  3. Command-Query Responsibility Segregation (CQRS)
  4. Het Outbox-patrocol voor betrouwbare publicatie
← Terug naar RabbitMQ-berichten en asynchrone systemen