Transport zdarzeń
Last updated
Was this helpful?
Last updated
Was this helpful?
Musi pomagać na wymienialność publishera
Powinien mieć swój interfejs
publish and handle inside same DB transaction
podobne do statycznej klasy publikującej
całość wykonuje się po wykonaniu wszystkich wydarzeń - czyli komenda z powodów biznesowych została zaakceptowana
Rosnąca transakcja
Spada skalowalność
Spada user experience
Implementacja gotowa na przetwarzanie asyncchroniczne
Np. email może zostać wysłany - użytkownik wtedy oczekuje na wykonanie transakcji, która jeśli np. email nie działa, spowoduje błąd.
(+) Łatwe w implementacji
(-) Niejawne efekty uboczne
(-) Niejawne wiązanie
Łatwa implementacja
Brak wiązania
Problem zawodności
Odwracanie kolejności w kodzie - najpierw transakcja, potem efekty uboczne.
Callback jeśli mamy problem i coś do wycofania
Transakcja listenera też może się wydarzyć - może nie jest to problem (np. jeśli raz nie dostanę maila, to nic się nie stanie).
Jeśli następuje sytuacja w której Listener MUSI wykonać określoną operację zawsze, do bazy danych można zapisać całe wydarzenie, tak by mogło ono być wywołana przez listener w późniejszym czasie, w przypadku błędu.
Zapisanie wszystkiego albo niczego. Zapis zarówno zdarzenia, jak i obecnego stanu.
Pobierz wydarzenia
Opublikuj je
Oznacz jako wysłane
Jeśli wystąpi problem z bazą danych przy zapisie wydarzenia jako wysłane, może się ono wysłać ponownie.
(-) bardziej złożona implementacja
deduplikaccja
ponawianie
problem wielu instancji aplikacji
(+) brak wiązania
(+) gwarancja dostarczenia
niezawodność