7

バックストーリー:

数か月前 (私が Azure Queues とそこにある SDK ツールに不慣れだったとき)、「これを行う方法」と「それを行う方法」を Google で検索しました...ここに現在いる場所があります。

  1. QueueClient(Microsoft.ServiceBus.Messaging - Microsoft.ServiceBus.dll) を使用して、Azure キューからメッセージを受信して​​います。

  2. 私の同じプログラムでは、MessageSender(同じ名前空間と dll からの) も使用して、Azure Queue にメッセージを送信しています。

  3. 私のプログラムは aDictionary<string, QueueClient>と aを追跡するDictionary<string, MessageSender>必要があります。これは必要以上に複雑です。

QueueClientAzure SDK に慣れてきたので、クラスが送信と受信の両方を実行できることに気付きました。では、最初のオブジェクトが両方を実行できるのに、なぜ 2 つのオブジェクトを追跡する必要があるのでしょうか。

質問:

MessageSenderクラスの代わりにクラスを使用する理由はありますQueueClientか?

送受信する必要がある場合は、QueueClientクラスを使用する必要がありますか?

4

2 に答える 2

11

対称性と使いやすさをサポートするために、2 つの異なるオブジェクトを公開しました。ご存知のように、トピック/サブスクリプションキューがあります。キューを使用しているだけの場合は、QueueClient を作成し、それを介して必要なすべての操作を実行できます。しかし、後でトピック/サブスクリプションのパブリッシュ/サブスクライブ モデルに移行したいとします。一般的なMessageSenderMessageRecieverに対してプログラミングすると、基になるトポロジを変更でき、コードを変更する必要はありません (アドレス urls/namesのみ)。したがって、キューとトピック/サブスクリプションの両方のシナリオで機能するコードを作成できます。

于 2012-02-20T19:11:21.183 に答える
7

OK - 最初に DLL を反映するべきでした... 答えが見つかりました。

QueueClientMessageSenderオブジェクトとそのMessageReceiver内部のオブジェクトを単純に持つクラスです。したがって、答えは「いいえ、同じことをするために2つのオブジェクトを持つべきではありません」です。

「Send」メソッドの反映されたコード:

public void Send(BrokeredMessage message)
{
    this.ThrowIfSenderNull("Send");
    this.InternalSender.Send(message);
}

上記の「InternalSender」オブジェクトのタイプはMessageSenderです。

于 2012-02-17T14:30:22.357 に答える