Hoppa till innehållet

Transactional Outbox

En outbox sparar en ändring i verksamhetsdata och det utgående meddelandet tillsammans. En separat process publicerar meddelandet senare.

API:er och datakontrakt

En Transactional Outbox sparar en ändring i verksamhetsdata och en beständig post för det utgående meddelandet i samma lokala databastransaktion. En separat process, en relay, läser posterna och publicerar dem till en meddelandebroker. Det täpper till luckan där databastransaktionen har lyckats men programmet aldrig når det efterföljande sändningsförsöket.

I ett fiktivt exempel får supportärendet S-27 statusen ”stängt”. Tjänsten sparar den nya statusen och händelsen E-27 tillsammans. Misslyckas transaktionen återställs båda ändringarna. Lyckas commit och tjänsten sedan kraschar ligger händelsen kvar för senare publicering.

Publicering och bearbetning är separata steg

Om relay-processen publicerar E-27 och kraschar innan resultatet sparas kan den publicera meddelandet igen. Mottagaren måste hantera upprepade leveranser säkert, exempelvis med en Transactional Inbox. En outbox ensam garanterar inte att effekten uppstår exakt en gång genom databas, broker och mottagare.

Bestäm hur väntande poster hittas, fel blir synliga och händelser för varje ärende vid behov publiceras i ordning. Även rensning och återstart behöver regler. CDC kan vara en teknisk grund för relay-processen; att fånga godtyckliga radändringar definierar inte i sig en verksamhetshändelse.

Källor