Jak nie zgubić zadania między zapisem w bazie a wysłaniem do kolejki?
Najpierw odpowiedz na głos lub w myślach, potem porównaj.
Odpowiedź
Jeśli robię dwa niezależne zapisy, mogę zapisać zadanie w bazie, ale nie wysłać wiadomości po awarii. Możliwa jest też odwrotna niespójność. Jednym rozwiązaniem jest outbox: w tej samej transakcji zapisuję dane biznesowe i rekord wiadomości czekającej na wysłanie.
Osobny program odczytuje zatwierdzone wiadomości i publikuje je do kolejki. Gdy się zatrzyma, może wrócić do niewysłanych rekordów. Nadal może jednak wysłać wiadomość ponownie, jeśli awaria nastąpiła po publikacji, ale przed jej oznaczeniem. Dlatego odbiorca wciąż potrzebuje ochrony przed duplikatem. Outbox łączy atomowo dwa zapisy w lokalnej bazie, nie wszystkie systemy świata.
Dlaczego to ważne: To zaawansowany temat, który staje się zrozumiały po poznaniu kolejki i transakcji.
Możliwe dopytania: Jak wykryć wiadomości, które zbyt długo czekają na publikację?
Jak poszło? Bądź szczery — „Jeszcze nie” dodaje pytanie do powtórki.
Zacznij od
- D-P01 · Co to jest HTTP i jak wygląda żądanie oraz odpowiedź? — Backend, dane i system design
- D-P10 · Co to jest transakcja w bazie danych? — Backend, dane i system design
- D-P13 · Co to jest kolejka wiadomości i po co jej używamy? — Backend, dane i system design
Dalsza lektura
- AWS Prescriptive Guidance: Transactional outbox(otwiera się w nowej karcie)Docs; dostęp 22.10.2026. Problem dual write i transakcyjny zapis zdarzenia.