0

I have some code dependent of Azure Service Bus. I've created an endpoint that checks the availability of my Azure Service Bus topic using the following code:

var connectionString = CloudConfigurationManager.GetSetting("servicebusconnectionstring");
var manager = NamespaceManager.CreateFromConnectionString(connectionString);
var sub = manager.GetSubscription("mytopic", "mysubscription");
var count = sub.MessageCount;

This actually works, but I have two questions (since I'm constantly experiencing timeouts using this code).

Question 1: Is there an easier/better way of checking Service Bus connectivity from C#?

Question 2: When using the code above, which instances should I configure as singleton in my IoC container? I'm suspecting creating all instances every time I ping this endpoint to cause the timeout, since I don't see problems in my other endpoints where I re-use a TopicClient.

ThomasArdal
  • 4,999
  • 4
  • 33
  • 73

1 Answers1

1

Getting MessageCount is potentially an expensive operation, especially if the value is high.

You could run a simple operation like a check whether the topic exists:

var ns = NamespaceManager.CreateFromConnectionString("...");
ns.TopicExists("mytopic");

which will throw an exception (probably MessagingCommunicationException) if communication to Service Bus fails.

It's ok to reuse NamespaceManager between requests, so you can make it singleton. Not sure if that brings any measurable performance benefit though.

Mikhail Shilkov
  • 34,128
  • 3
  • 68
  • 107