72 votes

NServiceBus et Rabbit MQ ou Kafka

J'essaie d'apprendre le système de messagerie. J'ai trouvé que RabbitMq et NServiceBus sont utilisés ensemble dans quelques endroits. Mes questions sont les suivantes

  1. Si j'utilise RabbitMQ, pourquoi ai-je besoin de NServiceBus ? et vice versa.
  2. Que peut faire NServiceBus mais pas RabbitMQ ou Kafka ?
  3. Puis-je utiliser NServiceBus et kafka ensemble ? Ou Apache-Kafka ne nécessite pas NServiceBus

1 votes

En rapport avec votre deuxième question

1 votes

@vappolinario Merci pour cette information. Est-ce la même chose pour Kafka ?

141voto

Derick Bailey Points 37859

Il y a quelques années, je me suis posé la même question. Je m'intéressais à NServiceBus pour travailler avec une file d'attente de messages différente, mais la question était la même.

J'ai décidé de ne pas utiliser NServiceBus.

6 mois plus tard, j'ai réalisé que j'avais reconstruit la moitié de ce que faisait NServiceBus... mais de façon beaucoup plus médiocre.

La question équivalente à celle de savoir pourquoi vous avez besoin de NServiceBus avec RabbitMQ, est de savoir pourquoi vous avez besoin du .NET Framework avec ASP.NET MVC, ou WinForms, ou XAML, ou n'importe laquelle des bibliothèques intégrées avec lesquelles .NET est livré, quand vous avez le Common Language Runtime.

Le CLR ne devrait-il pas être suffisant, après tout ?

Bien sûr que non. Disposer du runtime sur lequel le code peut s'exécuter - l'interpréteur MSIL et le moteur d'exécution - est loin d'être suffisant pour être productif.

Bien sûr, vous pouvez écrire des applications en ligne de commande qui prennent des entrées et produisent des sorties. Mais essayez de créer une application réelle sans les bibliothèques communes, sans les pilotes SQL Server intégrés, sans les contrôles ou les bibliothèques de tiers. Construisez une application Windows Desktop sans l'espace de noms System.Windows.

Vous avez besoin de ces bibliothèques pour vous fournir des collections, des accès aux bases de données, des objets de fenêtre et des contrôles d'interface utilisateur.

De même, RabbitMQ vous donne tout ce dont vous avez besoin pour démarrer et travailler, mais pas assez pour maintenir la productivité.

Bien sûr, vous pouvez vous procurer le pilote .NET de RabbitMQ et commencer à produire et à consommer des messages.

Pendant un certain temps, cela fonctionnera très bien.

Très vite, vous vous retrouverez à créer une enveloppe autour du pilote, afin de réduire la quantité de code à écrire.

Ensuite, vous aurez besoin de traiter la question des ack et des nack, et vous créerez une API simple pour cela.

Ensuite, le besoin de files d'attente en lettre morte apparaîtra avec les appels nack, et vous l'intégrerez dans votre API - simplifiée par rapport au pilote rabbitmq, bien sûr.

En fin de compte, vous devrez traiter les messages empoisonnés, c'est-à-dire les messages mal formés qui provoquent des exceptions. Encore une fois, vous ne voulez pas écrire un code unique pour cela, vous écrirez donc une bibliothèque pour le gérer.

La liste est longue.

Dans six mois, vous vous retrouverez à travailler avec une bibliothèque à moitié écrite, à peine spécifiée et non testable, qui ne fait qu'imiter la valeur et les capacités de NServiceBus (ou de MassTransit ou de toute autre bibliothèque de bus de service de votre choix).

Je ne dirai pas que vous devez utiliser NServiceBus. Et je dirais que vous devriez apprendre comment RabbitMQ fonctionne, sans lui. Mais une fois que vous avez dépassé les bases de l'envoi et de la réception de messages, la valeur de NServiceBus et des autres implémentations de bus de service devient très vite évidente.

7 votes

J'ai enfin une réponse concise ! "La question équivalente à celle de savoir pourquoi vous avez besoin de NServiceBus avec RabbitMQ, est de demander pourquoi vous avez besoin du .NET Framework avec ASP.NET MVC, ou WinForms, ou XAML, ou n'importe laquelle des bibliothèques intégrées avec lesquelles .NET est livré, quand vous avez le Command Language Runtime" et je vais tweeter ça.

0 votes

Une très belle explication claire @Derick. Merci beaucoup d'avoir pris le temps de l'expliquer. C'est maintenant assez clair

0 votes

Merci, bien écrit.

1voto

Alexander Bortnik Points 711

Il semble qu'il existe désormais un support communautaire pour le transport Kafka dans NServiceBus : https://docs.particular.net/nservicebus/kafka/ (je ne l'ai pas encore essayé moi-même).

2 votes

C'est un lien mort maintenant, j'en ai peur.

0 votes

github.com/pablocastilla/NServiceBus.Kafka Il ne semble pas être entretenu cependant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X