几个月前(当我不熟悉Azure Queues和SDK工具时)我用Google搜索"我该怎么做?#34;和#34;我该怎么做" ...这就是我今天所处的位置:
我使用QueueClient
(Microsoft.ServiceBus.Messaging - Microsoft.ServiceBus.dll)从Azure队列接收邮件。
在我的同一个程序中,我还使用MessageSender
(来自相同的命名空间和dll)将消息发送到Azure队列。
我的程序必须跟踪Dictionary<string, QueueClient>
和Dictionary<string, MessageSender>
- 这比它应该更复杂。
现在我对Azure SDK更熟悉了......我意识到QueueClient
课程可以发送和接收 ......所以为什么我要跟踪当第一个对象可以同时执行时,有2个对象吗?
有没有理由使用MessageSender
课而不是QueueClient
课?
如果我需要发送和接收,我不应该只使用QueueClient
课程吗?
答案 0 :(得分:9)
我们已经暴露了两个不同的对象以支持对称性和易用性。如您所知,我们Topics/Subscriptions以及Queues。如果您只是使用队列,那么您可以创建QueueClient并实现所需的所有操作。但是,您后来想要转向主题/订阅发布 - 订阅模型。针对通用MessageSender和MessageReciever进行编程将允许您更改基础拓扑,而不必修改任何代码(仅address urls/names)。因此,您可以编写可在Queue以及主题/订阅方案中使用的代码。
答案 1 :(得分:6)
好的 - 我应该首先反映DLL ...找到答案。
QueueClient
是一个只有一个MessageSender
对象和一个MessageReceiver
对象的类。所以答案是“不,你不应该有2个对象来做同样的事情”。
public void Send(BrokeredMessage message)
{
this.ThrowIfSenderNull("Send");
this.InternalSender.Send(message);
}
上面的“InternalSender”对象是MessageSender
类型。