1
votes

I am facing an issue with timeouts on subscriptions. I have an exponential retry policy in effect on namespacemanager (maxBackoff 30 seconds), which has helped alleviate timeouts with QueueExists() and TopicExists(). However, over 95% of the errors I log are with GetSubscription() and SubscriptionExists(). I do have a lot of queues (over 1000), topics (over 1000), and subscribers (over 1000). No single topic has more than 700 subscribers, which keeps us comfortably away from the 2000 subscriber per topic limit. Any help is appreciated!

A sanitized error segment for GetSubscription():

The request has timed out after 60000 milliseconds. The successful completion of the request cannot be determined. Additional queries should be made to determine whether or not the operation has succeeded. TrackingId:[a guid, intentionally removed],TimeStamp:[a datetime, intentionally removed] Server stack trace: Exception rethrown at [0]:    at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result)   at Microsoft.ServiceBus.NamespaceManager.OnEndGetSubscription(IAsyncResult result)   at Microsoft.ServiceBus.NamespaceManager.GetSubscription(String topicPath, String name)   at [remainder intentionally removed]

A sanitized error segment for SubscriptionExists():

The request has timed out after 60000 milliseconds. The successful completion of the request cannot be determined. Additional queries should be made to determine whether or not the operation has succeeded. TrackingId:[a guid, intentionally removed],TimeStamp:[a datetime, intentionally removed] Server stack trace: Exception rethrown at [0]:    at Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult result)   at Microsoft.ServiceBus.NamespaceManager.OnEndSubscriptionExists(IAsyncResult result)   at Microsoft.ServiceBus.NamespaceManager.SubscriptionExists(String topicPath, String name)   at [remainder intentionally removed]

I would enjoy some enlightenment of any mechanism to use the tracking information that is provided in the stack trace. Thanks!

1

1 Answers

0
votes

I have learned that SubscriptionExists() should be avoided. The preference is to perform the NamespaceManager.GetSubscription() call and trap on the MessagingEntityNotFoundException so it is discarded.