Wzorzec outbox (transactional outbox)
Zapisanie zdarzenia w tabeli outbox w tej samej transakcji bazy co sama zmiana, a potem osobne opublikowanie go w brokerze.
Nie da się atomowo zapisać do bazy i opublikować w brokerze: jedno może się udać, a drugie nie, i system po cichu przestaje się zgadzać sam ze sobą. Z outboxem zmiana stanu i wiersz zdarzenia zatwierdzają się razem albo wcale. Przekaźnik czyta nowe wiersze (odpytując tabelę albo przez change data capture) i publikuje je co najmniej raz, więc konsumenci muszą ignorować duplikaty.
Powiązane hasła
- Wzorzec inbox (idempotentny konsument): Konsument zapisuje id każdej przetworzonej wiadomości w tej samej transakcji co własną zmianę i pomija każde id, które już widział.
- CDC (change data capture): Odczytywanie zatwierdzonych zmian z dziennika transakcji samej bazy i przesyłanie ich jako zdarzeń do innych systemów.
- Dostarczenie co najmniej raz (at-least-once delivery): Gwarancja kolejki albo brokera, że każda wiadomość dotrze, być może więcej niż raz, więc konsumenci muszą radzić sobie z duplikatami.
- CQRS (rozdzielenie zapisu i odczytu): Podział systemu na stronę zapisu, która zmienia dane, i osobną stronę odczytu ułożoną pod zapytania, synchronizowane zdarzeniami.
