NServiceBus と Rabbit MQ または Kafka 質問する

NServiceBus と Rabbit MQ または Kafka 質問する

私はメッセージングシステムを学ぼうとしています。いくつかの場所ではRabbitMqとNServiceBusが一緒に使用されていることがわかりました。私の質問は次のとおりです。

  1. RabbitMQ を使用している場合、なぜ NServiceBus が必要なのでしょうか? 逆の場合も同様です
  2. NServiceBus ではできても、RabbitMQ や Kafka ではできないことは何ですか?
  3. NServiceBusとkafkaを一緒に使用できますか?またはApache-KafkaはNServiceBusを必要としません

ベストアンサー1

何年も前、私は自分自身に同じ質問をしました。Nサービスバス別のメッセージ キューで作業しようとしましたが、質問は同じでした。

NServiceBus を使用しないことにしました。

6 か月後、私は NServiceBus の機能の半分を再構築したことに気づきました...ただし、はるかに劣悪なものでした。

RabbitMQ で NServiceBus が必要な理由という質問は、Common Language Runtime があるのに、なぜ .NET Framework と ASP.NET MVC、WinForms、XAML、または .NET に付属する組み込みライブラリが必要なのかという質問と同じです。

結局のところ、CLR で十分ではないでしょうか?

もちろん違います。コードを実行できるランタイム (MSIL インタープリターと実行エンジン) があるだけでは、生産性を高めるのに十分とは言えません。

もちろん、入力を受け取り、出力を生成するコマンドライン アプリケーションを作成できます。ただし、共通ライブラリを使用せずに、組み込みの SQL Server ドライバーを使用せずに、サード パーティのコントロールやライブラリを使用せずに、実際のアプリケーションを構築してみてください。System.Windows 名前空間を使用せずに Windows デスクトップ アプリを構築してください。

コレクション、データベース アクセス、ウィンドウ オブジェクト、UI コントロールを提供するには、これらのライブラリが必要です。

同様に、RabbitMQ は開始して作業するために必要なものをすべて提供しますが、生産性を維持するには不十分です。

もちろん、RabbitMQ 用の .NET ドライバーを入手して、メッセージの生成と消費を開始できます。

しばらくはこれで問題なく動作します。

すぐに、ドライバーのラッパーを作成することになり、記述する必要があるコードの量を減らすことができます。

次に、ack と nack を処理する必要があることに気づき、そのための簡単な API を作成します。

次に、nack 呼び出しでデッドレター キューの必要性が浮上し、それを API にラップします (もちろん、rabbitmq ドライバーに比べて簡略化されます)。

最終的には、不正な形式になっていて例外を引き起こす有害なメッセージに対処する必要があります。この場合も、これに対して 1 回限りのコードを書くのは望ましくないため、これを処理するためのライブラリを作成します。

リストはどんどん続きます。

今から 6 か月後には、NServiceBus (または MassTransit や選択したその他のサービス バス ライブラリ) の価値と機能を模倣するだけの、半分しか書かれておらず、ほとんど仕様が定められていない、テストできないライブラリで作業することになります。

NServiceBusを使わなければならないとは言いません。RabbitMQがNServiceBusなしでどのように動作するかを学ぶべきだと私は言います。しかし、メッセージの送受信の基本を理解すれば、Nサービスバスおよびその他のサービス バス実装の違いは、すぐに明らかになります。

おすすめ記事