Gå til indholdet

Transactional Outbox

En outbox gemmer en ændring i forretningsdata og den udgående hændelse samlet. En separat proces publicerer meddelelsen senere.

API'er og datakontrakter

En Transactional Outbox gemmer en ændring i forretningsdata og en varig registrering af den udgående meddelelse i samme lokale databasetransaktion. En separat proces, en relay, læser registreringerne og publicerer dem til en meddelelsesbroker. Det lukker hullet, hvor databasetransaktionen er gennemført, men programmet aldrig når det efterfølgende afsendelsesforsøg.

I et fiktivt eksempel skifter supportsag S-27 status til »lukket«. Tjenesten gemmer den nye status og hændelsen E-27 sammen. Fejler transaktionen, rulles begge ændringer tilbage. Gennemføres commit, og tjenesten derefter går ned, bliver hændelsen liggende til senere publicering.

Publicering og behandling er separate trin

Publicerer relay-processen E-27 og går ned, før den registrerer resultatet, kan den publicere meddelelsen igen. Modtageren skal kunne håndtere gentagne leveringer sikkert, for eksempel med en Transactional Inbox. En outbox alene garanterer ikke, at virkningen kun indtræffer én gang på tværs af database, broker og modtager.

Fastlæg, hvordan ventende registreringer findes, fejl bliver synlige, og hændelser for hver sag om nødvendigt publiceres i rækkefølge. Oprydning og genstart kræver også regler. CDC kan være et teknisk grundlag for relay-processen; registrering af vilkårlige rækkeændringer definerer ikke i sig selv en forretningshændelse.

Kilder