NServiceBusとRabbit MQまたはKafkaの組み合わせ
質問
メッセージングシステムを学ぼうとしています。私はRabbitMqとNServiceBusがいくつかの場所で一緒に使用されていることを発見しました。私の質問は次のとおりです。
- RabbitMQを使用している場合、なぜNServiceBusが必要なのですか? その逆も同様です。
- NServiceBusにできて、RabbitMQやKafkaにできないことは何ですか?
- NServiceBusとkafkaを一緒に使用できますか?または、Apache-Kafkaは、NServiceBusを必要としません。
どのように解決するのですか?
数年前、私は自分自身に同じ質問をしました。私は別のメッセージ キューで動作するように NServiceBus を見ていましたが、質問は同じでした。
私は NServiceBus を使用しないことにしました。
6ヶ月後、私はNServiceBusが行っていたことの半分を再構築していたことに気づきました...ただ、ずっとお粗末なだけです。
なぜRabbitMQでNServiceBusが必要なのかという質問に相当するのは、なぜASP.NET MVC、WinForms、XAML、または共通言語ランタイムがあるのに、.NETに付属する組み込みライブラリのいずれかを使って.NETフレームワークを必要とするのかと問うことです。
結局のところ、CLR で十分ではないでしょうか?
もちろんそうではありません。コードが実行できるランタイム、つまり MSIL インタープリターと実行エンジンを持つことは、生産性を高めるには十分ではありません。
確かに、入力を受けて出力を生成するコマンドラインアプリケーションを書くことはできます。しかし、一般的なライブラリなしで、組み込みの SQL Server ドライバーなしで、サード パーティのコントロールやライブラリなしで、実際のアプリケーションを構築してみてください。System.Windows 名前空間なしで Windows デスクトップ アプリケーションを構築してください。
コレクション、データベース アクセス、ウィンドウ オブジェクト、UI コントロールを提供するために、これらのライブラリが必要なのです。
同様に、RabbitMQは、開始して作業するために必要なすべてを提供しますが、生産性を維持するためには十分ではありません。
確かに、RabbitMQ用の.NETドライバを入手して、メッセージの生成と消費を開始することはできます。
しばらくの間、これはうまくいくでしょう。
すぐに、ドライバの周りにラッパーを作成し、書くべきコードの量を減らすことができることに気がつくでしょう。
そして、ack対nackを扱う必要があることに気づき、そのための簡単なAPIを作成することになるでしょう。
そして、nackの呼び出しでデッドレターキューの必要性が出てくるので、それをAPIで包む。もちろん、rabbitmqドライバと比べて単純化する。
最終的には、不正なメッセージや例外を引き起こすメッセージであるポイズンメッセージを扱いたいと思うことでしょう。もう一度言いますが、このために一回限りのコードを書きたくはないでしょうから、それを処理するためのライブラリを書くことになるでしょう。
リストはさらに続きます。
今から6ヶ月後、あなたはNServiceBus(またはMassTransitやあなたが選んだ他のサービスバスライブラリ)の価値と機能を模倣するだけの、中途半端に書かれた、ほとんど指定されていない、テストできないライブラリを使って仕事をしている自分に気づくことでしょう。
NServiceBus を使用しなければならないとは言いません。そして、RabbitMQがどのように動作するか、それなしで学ぶべきであると言います。しかし、メッセージの送受信の基本を超えると、NServiceBusや他のサービスバス実装の価値は、非常に早く明らかになります。
関連
-
[解決済み] RabbitMQ」メッセージの種類「Ready」「Unacked」とは何ですか?
-
[解決済み] RabbitMQからすべてのキューを削除しますか?
-
[解決済み] RabbitMQ set_permissions シンタックス noob
-
[解決済み】なぜPostgreSQLのようなデータベース上でRabbitMQのようなメッセージブローカーが必要なのでしょうか?
-
[解決済み】Kafkaのトピックとパーティションを理解する
-
[解決済み] RabbitMQはどのようなポートを使用するのですか?
-
[解決済み] JMSとAMQP - RabbitMQ
-
[解決済み] Logstashとelasticsearchの間のデータブローカー/メッセージングシステムとして、RedisとRabbitMQの比較
-
[解決済み] rabbitmq管理画面のユーザーをリセットする方法
-
[解決済み] コマンドラインからキューとバインディングを作成するRabbitMQ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] RabbitMQ」メッセージの種類「Ready」「Unacked」とは何ですか?
-
[解決済み] RabbitMQからすべてのキューを削除しますか?
-
[解決済み] RabbitMQのコンシューマテストを自動化する
-
[解決済み] RabbitMQ set_permissions シンタックス noob
-
[解決済み] RabbitMQ:rabbitmqのバージョンを確認する
-
[解決済み] RabbitMQはどのようなポートを使用するのですか?
-
[解決済み] メッセージ、キュー、エクスチェンジの限界とは?
-
[解決済み] rabbitmq管理画面のユーザーをリセットする方法
-
[解決済み] コマンドラインからキューとバインディングを作成するRabbitMQ