2016-06-15 27 views
5

Co jest najlepszą praktyką, jeśli masz architekturę sterowaną zdarzeniami, a usługa subskrybująca zdarzenia musi czekać na wiele zdarzeń (tego samego rodzaju) przed przystąpieniem do tworzenia następnego zdarzenia w łańcuchu?Obsługa zależności wielu zdarzeń w architekturze sterowanej zdarzeniami

Przykładem może być usługa obsługi zamówienia książki, która musi czekać na każdą książkę w kolejności, w jakiej została wykonana przez magazyn, przed utworzeniem zdarzenia, w którym zostało wybrane zamówienie, aby usługa wysyłki (lub coś podobnego) odbiera zamówienie i zaczyna się przygotowywać do wysyłki.

Odpowiedz

5

Można użyć wzoru Aggregator, zwanego także konwerterem równoległym .

Zasadniczo musisz mieć jakiś sposób identyfikacji wiadomości, które muszą być agregowane, i kiedy zbiorczy zestaw został odebrany, tak aby można było rozpocząć przetwarzanie.

Bez wychodzenia i buying the book * strona internetowa platformy integracyjnej Apache Camel ma około nice resource implementacji wzorca agregatora. Chociaż jest to wyraźnie charakterystyczne dla Camela, możesz zobaczyć, jakie rzeczy są w to zaangażowane.

* disclaimer, nie jestem związany w jakikolwiek sposób z Adison Wesley, lub którykolwiek z autorów książki ...

+0

Dzięki za sugestię. Właściwie mam dostęp do książki za pośrednictwem Safari Books Online. Wygląda na to, że Aggregator jest właśnie tym, czego szukałem. – Patrick

12

Innym przydatnym wzór obok agregatora że Tom wspomniano powyżej jest a saga pattern (mini przepływ pracy). Używałem go wcześniej z biblioteką wiadomości o nazwie NServiceBus do obsługi koordynowania wielu wiadomości, które są ze sobą skorelowane.

wzór jest bardzo użyteczny i dobrze pasuje do długotrwałych procesów. nawet jeśli twoje skorelowane wiadomości to różne wiadomości, takie jak OrderStarted, OrderLineProcessed, OrderCompleted.

+0

Dobra sugestia. Zajmowałem się tym, aby obsłużyć procesy, które mogą zawieść podczas wykonywania, aby można je było odzyskać po ponownym uruchomieniu usługi lub uruchomieniu nowej instancji. – Patrick