Det etableres en CDC-komponent. Denne skal deployes separat til en egen container app, og skaleres vertikalt etter behov.
- [x] Sette opp Bicep for infra
- [x] Sette opp docker-container for bruk både lokalt og i azure
- [x] Implementere deploy-pipline
- [x] Implementere CDC som egen csproj
Kan ikke gå ut i fra at ukonsumerte replication slots overlever da Azure Postgre server kan droppe de fremfor å la postgre dø pga full WAL. Må håndtere disse scenariene.
Videreføre correlation id?
Startup:
Lag publication om ingen finnes
Lag rep slot om ingen finnes
(SnapshotSync) Last inn alle nåværende outboxes til buss dersom rep slot ikke fantes i steg 2, i batches. (Lagre siste timestamp/id som vi klarte å overføre til buss dersom vi blir avbrutt i denne prosessen og må starte på nytt? Kan kalle det snapshotCheckpointing) (Alternativt: tillat flere bus events per outbox message, service må da låse outbox og BARE outbox)
Start replication (subscription) som overføres til buss.
Shutdown:
Logg kritisk error dersom error er årasken til shutdown.
Rydd opp rep slot og publication i finally block slik at WAL kan fjernes. Kan gjøres pga steg 3 i startup. Vil prevantivt forhindre at WAL fylles opp både ute i miljø og lokalt.
Snapshot sync (steg 3 av startup):
Last inn SnapshotCheckpoint, kan være null ved init. Dersom den er null, returner DateTimeOffset.MinValue
Forsøk å pinge SnapshotCheckpoint tilbake til postgres for å verifisere at CDC har tilgang før start av snapshot prosessering. Bruk upsert syntax: "INSERT INTO … ON CONFLICT DO UPDATE"
Stream hele outbox tabellen med
WHERE createdAt > checkpoint.timestamp OR (createdAt = checkpoint.timestamp AND id > checkpoint.id)
ORDER BY createdAt ASC, id ASC
For hver outbox:
4.1. Send event på buss
4.2. Oppdater SnapshotCheckpoint: timestamp og id av siste vellykkede utsending av outbox melding på buss
Service:
Kan komme melding på bussen om en outbox som alt er konsummert og fjernet. Log info og hopp over.
Scenario:
Finner ikke outbox message => Går ut i fra at den er prossesert, log, gå videre
Finner outbox message =>
Alle konsumerne er håndtert => delete
Flere service instanser plukker samme melding => opptil flere duplikater, en instans melder feil ved insert av en OutboxMessageConsumer
Det etableres en CDC-komponent. Denne skal deployes separat til en egen container app, og skaleres vertikalt etter behov.
Se også
49
50