質問

メッセージキューを使用して多数のパブリッシャー/サブスクライバーとシステムを構築していた場合、いくつかのネットワーク構成オプションがあるようです。

  1. すべてのマシンが使用する1つのクラスター化ブローカーを持つことができます - 各マシンにはローカルキューがありません
  2. すべてのマシンにブローカーをローカルにインストールし、ストアアンドフォワードを使用してリモートマシンにメッセージを配信できます

さまざまなテクノロジーがさまざまな構成を強制しているようです。たとえば、MSMQはすべてのマシンに独自のローカルキューを持つ必要がありますが、TIBCO EMSは、各消費者にローカルキューなしでクラスターで使用されることが多いようです。

地元のキューを持っていないという欠点は何ですか?また、決定に影響する要因は何ですか?

役に立ちましたか?

解決

耐久性のあるメッセージストアを提供するローカルキューがないことは、メッセージ配信を保証できないことを意味します。ブローカーインスタンスを備えたクラスターでRabbitMQのようなものをローカルに使用すると、配信用のメッセージを保存するための耐久性のあるメカニズムが得られます。耐久性のあるメッセージを送信するためにリモートブローカーにネットワーク接続を介して接続する必要がある場合、ネットワークの障害のリスクが高くなります。

MSMQもストアアンドフォワードですが、クラスター化されたルーティング機能は提供されません。これは、アプリケーションが作業を行う必要があることを意味します(または、MassTransitやNserviceBusなど、その上にレイヤーがあります)。

TIBCOを考えると、ブローカーインスタンスをローカルに実行する代わりに、アプリケーションサーバーが通信するEMSサーバーの集中クラスターを考えています。 EMSとBusinessWorksアプリケーションサーバーをラップするGUIツールは、その世界で実際にモデルを強制します。

メッセージがローカルに保存されている分散ケースのいずれかで、マシン自体がメッセージストレージ用に適切に装備されていることを確認することが重要です。

他のヒント

私は、ほとんどのシナリオでローカルキューが必要になると思います。

メッセージが耐久性がある必要がある場合は、ローカルキューが必要です。言い換えれば、リモートキューへの接続が信頼できず、メッセージが最終的にサブスクライバーに到達することを望む場合、ローカルキューのストアアンドフォワード機能が必要になります。

メッセージを耐久性が必要ではない場合(イベントの発砲後に紛失する可能性があります)、リモート共有キューはオプションになります。

あなたはを見たいかもしれません nservicebusディストリビューターモデル, 、これは2つのシナリオのハイブリッドです。各マシンのローカルキューで、リモートブローカー/ディストリビュータークラスターに転送します。

MSMQが古くなっているように見えるので、MSMQに対するコメントに同意するかどうかはわかりません。多分私は何かが足りません。

どちらのシナリオもMSMQでサポートされています。

シナリオ1では、クライアントはトランザクションリモートレシーブ(MSMQ 4.0以上)を使用します。トランザクションであるため、受信は信頼性が高く、メッセージは耐久性があります(MSMQの以前のバージョンとは異なり、受信がサーバーにメッセージを残します)。

シナリオ2では、ストアアンドフォワードの発信キューがクライアントのローカルトランザクションキューに送信します(再び信頼性があり、耐久性があります)。

信頼性と耐久性は、ローカルとリモートキューを使用するための意思決定ポイントであってはなりません。 Peformanceは、MSMQの差別化要因です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top