7

背景故事:

几个月前(当我刚接触 Azure Queues 和 SDK 工具时)我在 Google 上搜索了“我该怎么做”和“我该怎么做”......这就是我今天的位置:

  1. 我正在使用QueueClient(Microsoft.ServiceBus.Messaging - Microsoft.ServiceBus.dll) 从 Azure 队列接收消息。

  2. 在我的同一个程序中,我还使用MessageSender(来自同一个命名空间和 dll)将消息发送到 Azure 队列。

  3. 我的程序必须跟踪 aDictionary<string, QueueClient>和 a Dictionary<string, MessageSender>- 这比它应该的要复杂。

现在我对 Azure SDK 更加熟悉了……我意识到QueueClient该类既可以发送也可以接收……那么为什么我要跟踪 2 个对象,而第一个对象可以同时执行这两个对象呢?

问题:

有什么理由使用MessageSender类而不是QueueClient类?

如果我需要发送和接收,我不应该只使用QueueClient类吗?

4

2 回答 2

11

我们公开了两个不同的对象以支持对称性和易用性。如您所知,我们有主题/订阅以及队列。如果您只是使用队列,那么您可以创建一个 QueueClient 并通过它实现所需的所有操作。但是假设您后来想迁移到主题/订阅发布-订阅模型。针对通用MessageSenderMessageReciever进行编程将允许您更改底层拓扑,而不必修改任何代码(只是地址 urls/names)。因此,您可以编写可以在队列以及主题/订阅场景中工作的代码。

于 2012-02-20T19:11:21.183 回答
7

好的 - 我应该首先反映 DLL ......找到了答案。

QueueClient是一个只有一个MessageSender对象和一个MessageReceiver对象的类。所以答案是“不,你不应该有 2 个对象来做同样的事情”

“发送”方法的反映代码:

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

上面的“InternalSender”对象是MessageSender.

于 2012-02-17T14:30:22.357 回答