0

FullDuplexサンプルでNServiceBusディストリビュータープロセスを使用する方法を記事「 NS​​erviceBusディストリビューターを機能させる」から学びました。

ディストリビューターを使用するには、次のキューが必要です。

  • MyClientInputQueue-単一クライアントの入力キュー
  • distributiondatabus-メッセージを送信するディストリビューターのキュー
  • distributioncontrolbus-ディストリビューターがその状態を保存するために使用するもの
  • server1messagebus-最初のサーバーインスタンスの入力キュー
  • server2messagebus-2番目のサーバーインスタンスの入力キュー

つまり、ディストリビューターでスケールアウトするには、別のサーバーでスケールアウトするたびに、新しいサーバーメッセージバスキューを指定する独立した構成ファイルが必要です。スケールダウンしたい場合は、痕跡の構成ファイルとキューが残っています。

ディストリビューターを使用しないテスト中に、サーバーの別のインスタンスを起動すると(デバッグ中にVisual Studioで[デバッグ]-[新しいインスタンスの開始]を選択するだけで)、新しいプログラムインスタンス(同じバイナリである)に気付いたため、これは不要のようです。同じ構成ファイルと同じ入力キューを持っている)は、最初のインスタンスとかなりうまく負荷分散しているようです。クライアントによって発行された場合、要求はサーバー間を行き来しているように見えます。

この負荷分散が効果的である場合、追加のリソース割り当てを必要とせずに、同じ高可用性入力キューを指す重複インスタンスを追加するだけでスケールアウトできることを意味します。それははるかに簡単でしょう!

では、ディストリビューターの利点は何ですか?

私の唯一の推測は、ディストリビューターが「ディストリビューターから作業を受け取るように構成されたワーカーノードを決して圧倒しないように設計されている」と述べているディストリビューターのドキュメントから来ています。各ワーカーのMsmqTransportConfigのNumberOfWorkerThreadsプロパティを使用して、ワーカープロセスが処理できる作業量を制御することはできませんか?

4

1 に答える 1

3

ディストリビューターは主に単一のメッセージタイプの処理をスケールアウトするために使用され、そのメッセージタイプの処理を同様に分離するという推奨事項に従うため、多くのキューにメッセージタイプと同じ名前を付けることができます。 distributiondatabus'、' server1messagebus'、および' server2messagebus'はすべて同じ名前になりますが、それぞれが異なるマシン上にあります。次に、ディストリビューターの制御バスにメッセージタイプと同様の名前を付けますが、接尾辞「_control」(またはそのようなもの)を付けます。

では、ディストリビューターの利点は何ですか?

これは、入力キューを共有できない多くのマシンにスケールアウトするためのものです。

于 2010-04-01T13:44:59.983 に答える