根据MSDN here,我们应该缓存用于与Service Bus通信的对象。但是,它会更详细地解释它。
更具体地说,我为给定的连接字符串创建MessagingFactory
并尽可能长时间地缓存它。我使用工厂为不同的队列和主题创建MessageReciever
和MessageSender
个实例。现在我的问题是:我还应该缓存它们吗?
我不打电话给Close
。
答案 0 :(得分:2)
要明确的是,当我们在这里说 cache 时,我们的意思是保持对对象的引用,而不是将其存储在缓存中[就像Redis的的。微软的指导只是指出,与发送/接收消息相比,建立与Service Bus的连接是一项昂贵的操作,拆除连接并在每次发送/接收时重新建立连接都没有任何好处。
当我使用这些对象编写代码时,我通常会在类上创建一个静态属性并将其保留在那里,因此对象会持续到应用程序域的生命周期。在ASP.NET应用程序中,如果您不喜欢静态类方法,可以将Service Bus对象保留在HttpContext.Application集合中,例如Application["ServiceBusReceiver"] = myServiceBusReceiver;
,然后您只需将其拉出当你需要的时候。
(并且,是的,还有其他方法可以在ASP.NET中执行“全局”对象...不想在这里涉及该主题。:-))
这与SQL连接池的思路相同......一旦建立连接,它们就会被保留并重复使用。最终,它不是功能差异,它只是一种性能优化,可以减少网络上的呼叫数量。
希望有所帮助,
斯科特