我有一些依赖于Azure Service Bus的代码。我使用以下代码创建了一个端点,用于检查Azure Service Bus主题的可用性:
var connectionString = CloudConfigurationManager.GetSetting("servicebusconnectionstring");
var manager = NamespaceManager.CreateFromConnectionString(connectionString);
var sub = manager.GetSubscription("mytopic", "mysubscription");
var count = sub.MessageCount;
这实际上有效,但我有两个问题(因为我经常使用此代码遇到超时)。
问题1:是否有更简单/更好的方法从C#检查服务总线连接?
问题2:使用上面的代码时,我应该在IoC容器中将哪些实例配置为单例?我怀疑在每次ping此端点时都会创建所有实例以导致超时,因为我在其他端点中看不到我重新使用TopicClient
的问题。
答案 0 :(得分:0)
获取MessageCount
可能是一项昂贵的操作,尤其是在值很高的情况下。
您可以运行一个简单的操作,例如检查主题是否存在:
var ns = NamespaceManager.CreateFromConnectionString("...");
ns.TopicExists("mytopic");
如果与Service Bus的通信失败,将抛出异常(可能为MessagingCommunicationException
。
可以在请求之间重用NamespaceManager
,这样就可以使它成为单例。不确定这是否会带来任何可衡量的性能优势。