缓存MessageSender和MessageReceiver

时间:2015-04-14 06:37:12

标签: servicebus azureservicebus

根据MSDN here,我们应该缓存用于与Service Bus通信的对象。但是,它会更详细地解释它。 更具体地说,我为给定的连接字符串创建MessagingFactory并尽可能长时间地缓存它。我使用工厂为不同的队列和主题创建MessageRecieverMessageSender个实例。现在我的问题是:我还应该缓存它们吗? 我不打电话给Close

1 个答案:

答案 0 :(得分:2)

要明确的是,当我们在这里说 cache 时,我们的意思是保持对对象的引用,而不是将其存储在缓存中[就像Redis的的。微软的指导只是指出​​,与发送/接收消息相比,建立与Service Bus的连接是一项昂贵的操作,拆除连接并在每次发送/接收时重新建立连接都没有任何好处。

当我使用这些对象编写代码时,我通常会在类上创建一个静态属性并将其保留在那里,因此对象会持续到应用程序域的生命周期。在ASP.NET应用程序中,如果您不喜欢静态类方法,可以将Service Bus对象保留在HttpContext.Application集合中,例如Application["ServiceBusReceiver"] = myServiceBusReceiver;,然后您只需将其拉出当你需要的时候。

(并且,是的,还有其他方法可以在ASP.NET中执行“全局”对象...不想在这里涉及该主题。:-))

这与SQL连接池的思路相同......一旦建立连接,它们就会被保留并重复使用。最终,它不是功能差异,它只是一种性能优化,可以减少网络上的呼叫数量。

希望有所帮助,

斯科特