Co wiemy?
**Scenariusz dydaktyczny (fikcyjny).** Nie jest relacją z konkretnego wdrożenia.
Budujesz serwis zamówień. Po złożeniu zamówienia trzeba zrobić dwie rzeczy: **(1)** zapisać zamówienie w bazie danych oraz **(2)** opublikować zdarzenie `ZamówienieZłożone` na kolejce, którą konsumują magazyn i serwis powiadomień.
Zespół napisał to najprościej: w jednej metodzie serwisu najpierw `INSERT` do bazy, a zaraz po nim `publish()` na kolejkę.
Na demie działa idealnie. Ale na produkcji zdarza się dwojako źle: czasem klient dostaje potwierdzenie, a magazyn **nigdy** nie dostaje zamówienia. A czasem odwrotnie — magazyn dostaje zdarzenie o zamówieniu, którego **nie ma** w bazie.
Dlaczego to się dzieje? Jak zapewnić, żeby baza i kolejka były spójne? Jaki wzorzec byś zastosował — i dlaczego „najpierw jedno, potem drugie” nie wystarcza?
Za co mentor ocenia odpowiedź?
Wynik jest wskazówką do nauki, nie oceną zawodowych kompetencji.
Zobacz pytania naprowadzające
- Co się stanie, jeśli `publish()` rzuci wyjątek już PO udanym `INSERT`?
- A jeśli aplikacja (albo sieć) padnie w mikrosekundzie MIĘDZY `INSERT` a `publish()`?
- Czy zamiana kolejności — najpierw `publish()`, potem `INSERT` — rozwiązuje problem, czy tylko odwraca objaw?
- Czy Twoja transakcja bazodanowa obejmuje kolejkę? Czy broker w ogóle wie o niej cokolwiek?