2016-06-29 28 views
23

Próbuję nauczyć się systemu przesyłania wiadomości. Odkryłem, że RabbitMq i NServiceBus używają razem w kilku miejscach. Moje pytania sąNServiceBus i Rabbit MQ lub Kafka

  1. Jeśli używam RabbitMQ, to dlaczego potrzebuję NServiceBus? i vice versa
  2. Co NServiceBus może zrobić, ale RabbitMQ lub Kafka nie może?
  3. Czy mogę używać razem NServiceBus i kafka? Lub Apache-Kafka nie wymaga NServiceBus
+0

Związane z drugim [pytanie] (http://stackoverflow.com/questions/9558128/specific-advantages-of-nservicebus-over-plan-rabbitmq) – vappolinario

+0

@vappolinario Dzięki za to. Czy to samo dotyczy Kafki? – MJK

+0

Nigdy nie używałem Kafki, więc nie wiem. – vappolinario

Odpowiedz

46

Wiele lat temu zadałem sobie to samo pytanie. Patrzyłem na NServiceBus, aby pracować z inną kolejką wiadomości, ale pytanie było takie samo.

Zdecydowałem się nie używać NServiceBus.

6 miesięcy później zdałem sobie sprawę, że ponownie zbudowałem połowę tego, co zrobił NServiceBus ... tylko znacznie słabiej.

Odpowiednim pytaniem, dlaczego potrzebowałbyś NServiceBus z RabbitMQ, jest pytanie, dlaczego potrzebujesz .NET Framework z ASP.NET MVC, lub WinForms, lub XAML, lub którejkolwiek z wbudowanych bibliotek, które .NET dostarczany z, gdy masz Common Runtime Runtime.

Czy CLR nie powinien wystarczyć?

Oczywiście, że nie. Posiadanie środowiska wykonawczego, na którym można wykonać kod - interpreter MSIL i silnik wykonawczy - nie wystarcza, aby osiągnąć produktywność.

Oczywiście można pisać aplikacje wiersza polecenia, które pobierają dane wejściowe i wytwarzają dane wyjściowe. Ale spróbuj zbudować prawdziwą aplikację bez wspólnych bibliotek - bez wbudowanych sterowników SQL Server; bez żadnych elementów sterujących lub bibliotek innych firm. Zbuduj aplikację Windows Desktop bez obszaru nazw System.Windows.

Potrzebujesz tych bibliotek, by dać ci kolekcje, dostęp do baz danych oraz obiekty okien i kontrolki interfejsu użytkownika.

Podobnie, RabbitMQ zapewnia wszystko, czego potrzebujesz, aby zacząć i działać, ale nie na tyle, aby utrzymać produktywność.

Oczywiście, możesz pobrać sterownik .NET dla RabbitMQ i zacząć produkować i konsumować wiadomości.

Przez chwilę to zadziała dobrze.

Wkrótce okaże się, że tworzysz opakowanie wokół sterownika, dzięki czemu możesz zmniejszyć ilość kodu, który musisz napisać.

Wtedy będziesz musiał radzić sobie z ack vs nack, a stworzysz prosty API do tego.

Następnie pojawia się potrzeba pojawienia się kolejki wiadomości nieprzeczytanych, dzięki wywołaniom typu nack, a także zawiniesz to w swoim API - uproszczonym w porównaniu do sterownika rabbitmq, oczywiście.

W końcu będziesz chciał zająć się wiadomościami zatrucia - wiadomościami, które są zniekształcone i powodują wyjątki. Ponownie, nie chcesz pisać do tego jednorazowego kodu, więc napiszesz bibliotekę, aby sobie z tym poradzić.

Lista jest długa.

Za 6 miesięcy znajdziesz pracę z półpisemną, ledwo określoną biblioteką, która tylko naśladuje wartość i możliwości NServiceBus (lub MassTransit lub jakiejkolwiek innej biblioteki magistrali usług, którą wybierzesz).

Nie powiem, że musisz używać NServiceBus. Powiedziałbym, że powinieneś nauczyć się jak działa RabbitMQ bez niego. Ale gdy już przekroczysz podstawy wysyłania i odbierania wiadomości, wartość NServiceBus i innych implementacji magistrali usług staje się bardzo widoczna, bardzo szybko.

+0

W końcu mam zwięzłą odpowiedź! "Równoważnym pytaniem, dlaczego potrzebujesz NServiceBus z RabbitMQ, jest pytanie, dlaczego potrzebujesz .NET Framework z ASP.NET MVC, lub WinForms, lub XAML, lub dowolną z wbudowanych bibliotek, które dostarcza .NET, gdy masz język wykonawczy Command Language. " Zawiadomię to. –

+0

Bardzo ładne, jasne wyjaśnienie @Derick. Wielkie dzięki za poświęcenie czasu na wyjaśnienie tego. Jest teraz wystarczająco jasne – MJK

+0

Dzięki, dobrze napisane. –