メッセージングシステムを学習しようとしています。 RabbitMqとNServiceBusがいくつかの場所で一緒に使用されていることがわかりました。私の質問は
数年前、私は自分自身に同じ質問をしました。 NServiceBusを別のメッセージキューで動作するように見ていましたが、問題は同じでした。
NServiceBusを使用しないことにしました。
6か月後、NServiceBusの半分を再構築したことに気づきました。
RabbitMQでNServiceBusが必要な理由の同等の質問は、ASP.NET MVC、WinForms、XAML、または.NETに付属する組み込みライブラリのいずれかを備えた.NET Frameworkが必要な理由を尋ねることです。共通言語ランタイムがあります。
結局のところ、CLRで十分ではないでしょうか?
もちろん違います。コードを実行できるランタイム(MSILインタープリターと実行エンジン)を用意するだけでは、生産性を高めるのに十分ではありません。
もちろん、入力を受け取って出力を生成するコマンドラインアプリケーションを作成できます。ただし、共通のライブラリなしで、組み込みのSQL Serverドライバーなしで、実際のアプリケーションを構築してください。サードパーティのコントロールやライブラリはありません。 System.Windows名前空間なしでWindowsデスクトップアプリを構築します。
コレクション、データベースアクセス、およびウィンドウオブジェクトとUIコントロールを提供するには、これらのライブラリが必要です。
同様に、RabbitMQは、作業を開始して作業するために必要なすべてを提供しますが、生産性を維持するには不十分です。
もちろん、RabbitMQの.NETドライバーを取得して、メッセージの生成と消費を開始できます。
しばらくの間、これはうまく機能します。
すぐに、ドライバーのラッパーを作成することに気付くので、書く必要のあるコードの量を減らすことができます。
次に、ack vs nackに対処する必要があることに気づき、そのためのシンプルなAPIを作成します。
次に、送達不能キューの必要性がnack呼び出しでポップアップし、それをAPIでラップします-もちろん、rabbitmqドライバーと比較して単純化されます。
最終的には、有害なメッセージ-不正な形式で例外を引き起こすメッセージに対処する必要があります。繰り返しになりますが、このための1回限りのコードを書きたくないので、それを処理するライブラリを作成します。
リストは延々と続く。
6か月後、NServiceBus(またはMassTransitまたは選択した他のサービスバスライブラリ)の値と機能のみを模倣する、半分書かれた、ほとんど指定されていない、テスト不能なライブラリを使用することになります。
NServiceBusを使用する必要はありません。そして、RabbitMQがどのように機能するかを、それなしで学ぶ必要があると思います。ただし、メッセージの送受信の基本を超えると、NServiceBusおよびその他のサービスバスの実装の価値が非常にすぐに明らかになります。
Kafka NServiceBusでのトランスポートは現在サポートされています: https://docs.particular.net/nservicebus/kafka/ (自分で試していない)まだ)。