Подтвердить что ты не робот

NServiceBus и кролик MQ или Kafka

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

  • Если я использую RabbitMQ, то зачем мне нужен NServiceBus? и наоборот
  • Что может сделать NServiceBus, но RabbitMQ или Kafka не могут?
  • Можно ли использовать NServiceBus и kafka вместе? Или Apache-Kafka не требует NServiceBus
4b9b3361

Ответ 1

Несколько лет назад я задал себе тот же вопрос. Я смотрел на 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 и других реализаций служебной шины становится очень очевидным, очень быстро.