メッセージキューとメッセージバス-違いは何ですか?



Message Queue Vs Message Bus What Are Differences



解決:

メッセージバス

メッセージバス は、さまざまなシステムがを介して通信できるようにするメッセージングインフラストラクチャです。 インターフェースの共有セット (( メッセージバス )。



ここに画像の説明を入力してください

出典:EIP

メッセージキュー



の基本的な考え方 メッセージキュー 単純なものです:

  • 2つ(またはそれ以上)のプロセスがを介して情報を交換できます 共通のシステムメッセージキューへのアクセス

  • 送信プロセスは、いくつかの(OS)メッセージパッシングモジュールを介して、別のプロセスが読み取ることができるメッセージをキューに配置します。



出典:デイブマーシャル

ここに画像の説明を入力してください

画像ソース

違い

メッセージキュー 含まれています FIFO (( 先入先出 )ルールに対して メッセージバス ではない。

結論

両方 見る 同じ種類の仕事をするように-2つの間でメッセージを渡す アプリケーション また モジュール また インターフェース また システム また プロセス 、のわずかな違いを除いて FIFO


概して、ベンダーソフトウェア製品に関しては、それらは交換可能に使用され、あなたが説明するようにプッシュまたはプルの点で強い区別はありません。

NS バス 対。 確かに、いくぶんレガシーな概念であり、最近ではIBMMQやTibcoRendezvousなどのシステムに由来しています。 MQは元々1:1システムであり、実際、さまざまなシステムを分離するためのキューでした。

対照的に、Tibcoは(として販売された)メッセージングバックボーンであり、同じトピックについて複数のパブリッシャーとサブスクライバーを持つことができました。

ただし、最近では、両方(および新しい競合製品)がお互いのスペースでプレイできます。両方とも、新しいメッセージのポーリングだけでなく、割り込みにも設定できます。どちらも、さまざまなシステム間の相互作用を仲介します。

しかし 表現 メッセージキュー は内部スレッド内メッセージポンプなどにも使用されますが、このコンテキストでは、実際には使用法が異なります。古典的なWindowsメッセージポンプについて考えると、これは確かにあなたが説明するプルモデルですが、実際にはアプリ間やボックス間よりもアプリ内です。


一部の製品は、以前はいずれかのカテゴリにのみ属していた機能をサポートするようになったため、これら2つの概念の境界線があいまいになりました(たとえば、Azure Service Busは両方のアプローチをサポートします)。

メッセージキューは、アプリケーションからメッセージを受信し、先入れ先出し(FIFO)方式で1つ以上の他のアプリケーションで利用できるようにします。多くのアーキテクチャシナリオでは、アプリケーションAがアプリケーションBとCに更新またはコマンドを送信する必要がある場合、BとCに別々のメッセージキューを設定できます。Aは各キューに別々のメッセージを書き込み、依存する各アプリケーションはそのキューから読み取ります。独自のキュー(キューから取り出されるとメッセージが削除されます)。 Aが更新を送信するために、BもCも使用可能である必要はありません。各メッセージキューは永続的であるため、アプリケーションが再起動すると、オンラインに戻るとキューからのプルが開始されます。これにより、依存するシステム間の依存関係を解消し、アプリケーションのスケーラビリティとフォールトトレランスを向上させることができます。

バス

メッセージバスまたはサービスバスは、1つ(または複数)のアプリケーションが1つまたは複数の他のアプリケーションにメッセージを通信する方法を提供します。先入れ先出しの保証がない場合があり、バスの加入者はメッセージの送信者の知らないうちに出入りすることができます。したがって、アプリケーションAは、メッセージバスを介してアプリケーションBにステータスの更新を伝達するように記述できます。後で、これらの更新の恩恵を受けることができるアプリケーションCが作成されます。アプリケーションCは、アプリケーションAを更新しなくても、メッセージバスをリッスンし、これらの更新に基づいてアクションを実行するように構成できます。送信アプリケーションがすべてのキューにメッセージを明示的に追加するキューとは異なり、メッセージバスはパブリッシュ/を使用します。サブスクライブモデル。メッセージはバスに公開され、その種類のメッセージをサブスクライブしたすべてのアプリケーションがそれを受信します。このアプローチにより、アプリケーションはオープン/クローズの原則に従うことができます。これは、アプリケーションが将来の変更に対してオープンになり、追加の変更に対してはクローズされたままになるためです。

ソース