Hoppa till innehållet

Transaktionell inbox

En transaktionell inbox använder beständiga meddelandeposter för att skydda lokal behandling mot dubbla leveranser.

Även känt somTransactional inbox
API:er & integration

En transaktionell inbox använder beständiga meddelandeposter för att skydda lokal behandling mot dubbla leveranser. I varianten som beskrivs här sparas registreringen av ett behandlat meddelande och ändringen av verksamhetsdata i samma databastransaktion.

En fiktiv tjänst med konsumentnamnet report-worker tar emot meddelandet E-42. Den skriver kombinationen av konsument och meddelande-ID i sin inbox och ökar en rapporträknare från 6 till 7. Båda ändringarna committas tillsammans. Ett unikhetsvillkor i databasen för kombinationen skyddar även när flera instanser arbetar samtidigt. Att först kontrollera och sedan skriva räcker inte i sig.

Tidpunkten för kraschen spelar roll

Om transaktionen misslyckas före commit består varken inboxposten eller ändringen av räknaren. Om commit lyckas men den efterföljande kvittensen till brokern går förlorad kan E-42 komma igen. Den befintliga posten förhindrar då en ytterligare ökning till 8. Kvittensen till brokern ingår inte i själva den lokala databastransaktionen.

Idempotens beskriver den säkra effekten av upprepning; en inbox är ett möjligt implementationsmönster. En outbox sparar i stället utgående meddelanden tillsammans med den lokala ändringen. Inboxen ensam garanterar inte att ett externt HTTP-anrop utförs eller ett e-postmeddelande skickas exakt en gång. Lagringstiden för meddelande-ID:n måste passa det möjliga tidsfönstret för omleverans och återuppspelning; poster som tas bort för tidigt skyddar inte längre mot senare dubbletter.

Källor

Artiklar om ämnet

API:er & integration med ASES

ERP, CRM och webbutik smidigt sammankopplade