2016-06-29 4 views
23

Я пытаюсь изучить систему обмена сообщениями. Я обнаружил, что RabbitMq и NServiceBus используют вместе в нескольких местах. Мои вопросы:NServiceBus и Rabbit MQ или Kafka

  1. Если я использую RabbitMQ, то зачем мне нужен NServiceBus? и наоборот
  2. Что может сделать NServiceBus, но RabbitMQ или Kafka не могут?
  3. Могу ли я использовать NServiceBus и kafka вместе? Или Apache-Kafka не требует NServiceBus
+0

Связано с вашим вторым [вопросом] (http://stackoverflow.com/questions/9558128/specific-advantages-of-nservicebus-over-plan-rabbitmq) – vappolinario

+0

@vappolinario Спасибо за это. Это то же самое для Кафки? – MJK

+0

Я никогда не использовал Кафку, поэтому не знаю – vappolinario

ответ

46

Несколько лет назад я задал себе тот же вопрос. Я смотрел на NServiceBus для работы с другой очередью сообщений, но вопрос был тот же.

Я решил не использовать NServiceBus.

6 месяцев спустя я понял, что я перестроил половину того, что NServiceBus сделал ... только намного хуже.

Эквивалентный вопрос о том, зачем вам нужен NServiceBus с RabbitMQ, заключается в том, чтобы спросить, зачем нужна .NET Framework с ASP.NET MVC или WinForms или XAML или любой из встроенных библиотек, которые .NET когда вы используете Common Language Runtime.

Должно ли не быть CLR, в конце концов?

Конечно нет. Наличие времени выполнения, на котором может выполняться код - интерпретатор MSIL и механизм выполнения - недостаточно, чтобы быть продуктивным.

Конечно, вы можете писать приложения командной строки, которые принимают входные данные и производят выходные данные. Но попробуйте создать реальное приложение без общих библиотек - без встроенных драйверов SQL Server; без каких-либо сторонних элементов управления или библиотек. Создайте приложение Windows Desktop без пространства имен System.Windows.

Эти библиотеки вам нужны, чтобы предоставить вам коллекции и доступ к базе данных, а также объекты окон и элементы пользовательского интерфейса.

Аналогично, RabbitMQ предоставляет вам все необходимое для начала работы и работы, но недостаточно для поддержания производительности.

Конечно, вы можете захватить драйвер .NET для RabbitMQ и начать создавать и потреблять сообщения.

Некоторое время это будет работать нормально.

Довольно скоро вы обнаружите, что создаете оболочку вокруг драйвера, поэтому вы можете уменьшить количество кода, необходимого для записи.

Тогда вам будет нужно иметь дело с ack vs nack, и вы создадите для этого простой API.

Тогда потребность в очередях с мертвой буквой появится с помощью nack-вызовов, и вы, конечно же, обернете это в своем API - упрощенном по сравнению с драйвером rabbitmq.

В конце концов, вы захотите иметь дело с ядовитыми сообщениями - сообщениями, которые были искажены и вызывают исключения. Еще раз, вы не хотите писать одноразовый код для этого, так что вы будете писать библиотеку для ее обработки.

Список можно продолжать и продолжать.

Через 6 месяцев вы обнаружите, что работаете с наполовину написанной, едва определенной, непроверенной библиотекой, которая только имитирует ценность и возможности NServiceBus (или MassTransit или любую другую другую библиотеку шины обслуживания, которую вы выбираете).

Я не скажу, что вы должны использовать NServiceBus. И я бы сказал, вы должны узнать, как работает RabbitMQ, без него. Но как только вы выходите за рамки отправки и получения сообщений, значение NServiceBus и других реализаций служебной шины становится очень очевидным, очень быстро.

+0

У меня наконец есть краткий ответ! «Эквивалентный вопрос о том, зачем вам нужен NServiceBus с RabbitMQ, заключается в том, чтобы спросить, почему вам понадобится .NET Framework с ASP.NET MVC или WinForms или XAML или любая из встроенных библиотек, с которыми поставляется .NET, когда у вас есть время выполнения командного языка. " annnd, я собираюсь чирикать. –

+0

Очень приятное четкое объяснение @Derick. Большое спасибо за то, что вы нашли время, чтобы объяснить это. Теперь достаточно ясно – MJK

+0

Спасибо, хорошо написано. –