Outbox-mønsteret for pålitelig publisering
Lær transaksjonsbasert outbox-mønster for atomisk lagring av forretningsdata og utgående meldinger, slik at problemet med doble skrivinger i hendelsesdrevne systemer elimineres.
Outbox-mønsteret for pålitelig publisering er en gratis leksjon i RabbitMQ-meldinger og asynkrone systemer på CoddyKit. Dette er leksjon 4 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.
Problemet med to skriveoperasjoner
Det å lagre i en database og publisere til RabbitMQ er to separate operasjoner. Hvis den ene lykkes og den andre mislykkes, kommer tilstanden og hendelsene Deres ut av synkronisering.
Dette er problemet med to skriveoperasjoner.
Hva er outbox-mønsteret?
Outbox-mønsteret skriver forretningsendringen og den utgående meldingen inn i samme databasetransaksjon, og publiserer deretter meldingen asynkront fra outbox-tabellen.
Outbox-tabellen
Opprett en tabell som lagrer ventende meldinger sammen med domenedataene Deres.
CREATE TABLE outbox (
id UUID PRIMARY KEY,
payload JSONB,
published BOOLEAN DEFAULT FALSE,
created_at TIMESTAMPTZ DEFAULT now()
);Atomisk skriving
Oppdater forretningsraden og sett inn outbox-raden i én transaksjon. Enten bekreftes begge, eller så bekreftes ingen av dem.
BEGIN;
INSERT INTO orders (id, status) VALUES ('42', 'paid');
INSERT INTO outbox (id, payload) VALUES (gen_random_uuid(), '{"order":"42"}');
COMMIT;Reléprosessen
Et separat relé (eller en meldingsformidler) spør outbox-tabellen etter upubliserte rader, publiserer dem til RabbitMQ og merker dem som publisert.
Spørring i outbox-tabellen
Reléet velger ventende rader i riktig rekkefølge og publiserer hver av dem.
SELECT id, payload FROM outbox WHERE published = FALSE ORDER BY created_at;Levering minst én gang
Hvis reléet krasjer etter publisering, men før raden merkes, publiserer det meldingen på nytt ved omstart. Forbrukere må derfor være idempotente for å tåle duplikater.
Alternativet Change Data Capture
I stedet for å spørre jevnlig leser verktøy som Debezium databasens write-ahead-logg og strømmer innsettinger i outbox-tabellen til RabbitMQ, noe som reduserer forsinkelse og belastning.
Kombinering med bekreftelser
Reléet bør bruke publisher-bekreftelser, slik at en rad først merkes som publisert etter at meldingsmegleren har bekreftet meldingen. Dette lukker tidsvinduet for tap.
Outbox kontra saga
Outbox garanterer at én enkelt tjeneste sender ut hendelsene sine på en pålitelig måte. En saga koordinerer en arbeidsflyt på tvers av flere tjenester. De utfyller hverandre: Hvert sagatrinn kan publisere via sin egen outbox.
Opprydding og oppbevaring
- Slett eller arkiver publiserte rader med jevne mellomrom
- Opprett en indeks på
publishedfor rask spørring - Overvåk reléforsinkelsen for å oppdage stopp tidlig
Kort sjekk
Test forståelsen Deres av outbox-mønsteret.
Oppsummering
Outbox-mønsteret lagrer utgående meldinger i samme transaksjon som forretningsdataene, og et relé publiserer dem deretter asynkront til RabbitMQ.
Det eliminerer problemet med to skriveoperasjoner, krever idempotente forbrukere på grunn av levering minst én gang, og fungerer godt sammen med publisher-bekreftelser og sagaer.
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 «Outbox-mønsteret for pålitelig publisering» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien RabbitMQ-meldinger og asynkrone systemer, inkludert «Outbox-mønsteret for pålitelig publisering», 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 «Outbox-mønsteret for pålitelig publisering»?
Lær transaksjonsbasert outbox-mønster for atomisk lagring av forretningsdata og utgående meldinger, slik at problemet med doble skrivinger i hendelsesdrevne systemer elimineres. 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 4 av 4.
Hvor lang tid tar leksjonen «Outbox-mønsteret for pålitelig publisering»?
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
- Idempotens i meldingsbehandling
- Saga-mønsteret med RabbitMQ
- Command-Query Responsibility Segregation (CQRS)
- Outbox-mønsteret for pålitelig publisering