CQRS: Przechowywanie zdarzeń i ich publikowanie - jak to zrobić w bezpieczny sposób?

Jak się dowiedziałem w Dlaczego repozytorium CQRS publikuje wydarzenia, a nie Magazyn wydarzeń? zadaniem repozytorium CQRS jest publikowanie zdarzeń. Jak na razie dobrze.

Oczywiście, przechowywanie zdarzeń i ich publikowanie powinno odbywać się w ramach jednej transakcji. Technicznie oznacza to zapisanie jednego (lub więcej) rekordów do sklepu i opublikowanie jednego (lub więcej) zdarzeń do magistrali komunikatów. Dlatego prosta transakcja bazodanowa nie wystarczy, powinna być rozproszona.

Teraz, niestety wiele baz danych NoSQL (takich jak MongoDB) nie obsługuje transakcji zgodnych z ACID, nawet nie mówiąc o możliwości dokonania transakcji rozproszonej. Co więcej, istnieją kolejki wiadomości, które nie obsługują również transakcji rozproszonych.

Więc pytanie brzmi: jak sobie z tym poradzić?

Czy jest jakiś zalecany wzorzec do użycia?

Author: Community, 2012-11-21

1 answers

Twoje repozytorium może publikować zdarzenia, nie musi. Rozwiązaniem w tym przypadku jest użycie magazynu zdarzeń jako kolejki. Proces w tle monitoruje magazyn zdarzeń pod kątem nowych zdarzeń, publikuje je (na przykład) w magistrali, a następnie oznacza je jako wysłane.

Jak zawsze są kompromisy. Prawdopodobnie będziesz musiał poradzić sobie z przynajmniej jednym wysyłaniem wiadomości i przetwarzaniem idempotentnym. Jest bardziej złożony niż użycie prostego rozproszonego transakcja.

Jonathan Oliver napisał (a) kilka postów na ten temat, które mogą Ci pomóc: usuwanie 2PC, Jak uniknąć dwufazowego Commita, wzorce Idempotencji

 21
Author: Martijn van den Broek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-04 07:30:25