ThomasArdal
ThomasArdal

Reputation: 5259

Checking connection to Azure Service Bus

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.

Upvotes: 0

Views: 2875

Answers (1)

Mikhail Shilkov
Mikhail Shilkov

Reputation: 35144

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.

Upvotes: 1

Related Questions