2012-01-24 13 views
5

Po przeczytaniu próbki z projektu pub/sub w MassTransit, zostawiłem mi drapanie w głowę.Przykładowy PubSub w MassTransit

W przykładzie aplikacja kliencka publikuje żądanie aplikacji subskrybenta, aby zaktualizować hasło fikcyjnego użytkownika. Ten przykładowy kod działa dobrze i łatwo podążać za odbijającą się kulą tego projektu.

HOWEVER--

W środowisku rzeczywistym świecie, celem pub/sub (w moim rozumieniu) jest mieć małą liczbę wydawców współdziałających z dużą liczbą abonentów. W przypadku abonenta wykonującego jakąkolwiek operację CRUD, czy wzorzec komunikacji nie powinien uniemożliwiać obsługi wiadomości więcej niż jednemu subskrybentowi? Byłoby mniej niż pożądane, aby dwudziestu subskrybentów próbowało na przykład zaktualizować ten sam rekord bazy danych.

Czy to tylko przypadek błędnego projektu próbki?

Jeśli pub/sub może być używany do operacji CRUD, w jaki sposób skonfigurować strukturę tak, aby zezwolić tylko jednemu subskrybentowi na wykonanie operacji?

Czy brakuje mi tylko podstawowych informacji na temat publikacji pub/sub?

Dzięki za wszelkie wyjaśnienia dostarczone ...

David

Odpowiedz

4

Scenariusz odnieść się do zwykle określany jako "konkurujące konsumentów, i to dość typowy pub/sub.

Jeśli każdy konsument ma swoją własną unikalną nazwę kolejki, każdy konsument otrzyma własną kopię wiadomości.

Alternatywnie, aby uzyskać konkurencyjne zachowania konsumentów, jeśli konsumenci udostępnić nazwę kolejki samo, będzie konkurencja między konsumentów dla każdej wiadomości (tak każda wiadomość zostanie przyjęty tylko raz)

+2

Dzięki. 90% moich dotychczasowych problemów pochodziło z braku znajomości właściwej terminologii. –

2

Można mieć n -to-n, wielu-kilku lub kilku-wielu wydawcom dla subskrybentów w dowolnym systemie pub/sub. To naprawdę kwestia tego, ilu aktorów chcesz odpowiedzieć na daną wiadomość.

Przykładowy projekt może nie być najlepszy, ale wydaje nam się, że pokazuje on, co się dzieje. W rzeczywistych przypadkach można go jednak stosować do zachowań typu CRUD; jednak bardziej na wielu frontach wysyłających wiadomości typu "load data" do middleware (cache) z prośbą o odpowiedź na te same dane. Jeśli dane zostaną w jakiś sposób zaktualizowane na interfejsie, musi opublikować komunikat wskazujący, że wiele aktualizacji oprogramowania pośredniego wymaga aktualizacji (pamięć podręczna, magazyn zaplecza itp.). [patrz CQRS]

Wiadomości ogólnie dotyczą bardziej pracy z odłączonymi systemami. Twój konkretny świat bardziej dotyczy struktury konsumentów i wydawców. Widziałem implementacje MassTransit, gdzie większość tras, gdzie statyczne i nie było tak naprawdę pub/sub, ale tylko wiele wysyłek wzdłuż znanej topografii systemów. Naprawdę rozumiem pojęcia, najlepszą znaną mi książką jest Enterprise Service Bus: Theory in Practice.

Mam nadzieję, że to pomoże!

Edytuj: Zobacz także nasze documentation, niektóre z tych koncepcji są tam dotykane.

+0

Dzięki Travis. Myślę, że to, co próbuję osiągnąć, jest zgodne z twoją "znaną topografią systemów". –

Powiązane problemy