如何影响 Azure C# 中 GetSubscription() 和 SubscriptionExists() 的重试策略

How do I affect a retry policy for GetSubscription() and SubscriptionExists() in Azure C#

我遇到了订阅超时的问题。我有一个对 namespacemanager 有效的指数重试策略(maxBackoff 30 秒),这有助于减少 QueueExists() 和 TopicExists() 的超时。但是,我记录的 95% 以上的错误都与 GetSubscription() 和 SubscriptionExists() 有关。我确实有很多队列(超过 1000 个)、主题(超过 1000 个)和订阅者(​​超过 1000 个)。没有一个主题拥有超过 700 个订阅者,这让我们轻松地远离每个主题 2000 个订阅者的限制。感谢您的帮助!

GetSubscription() 的清理错误段:

请求在 60000 毫秒后超时。无法确定请求是否成功完成。应该进行额外的查询以确定操作是否成功。 TrackingId:[a guid,有意删除],TimeStamp:[日期时间,有意删除] 服务器堆栈跟踪:在 [0] 重新抛出异常:在 Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult 结果)在 Microsoft.ServiceBus.NamespaceManager.OnEndGetSubscription( IAsyncResult 结果)在 Microsoft.ServiceBus.NamespaceManager.GetSubscription(String topicPath,String name)在 [remainder intentionally removed]

SubscriptionExists() 的清理错误段:

请求在 60000 毫秒后超时。无法确定请求是否成功完成。应该进行额外的查询以确定操作是否成功。 TrackingId:[a guid,有意删除],TimeStamp:[日期时间,有意删除] 服务器堆栈跟踪:在 [0] 重新抛出异常:在 Microsoft.ServiceBus.Common.AsyncResult.End[TAsyncResult](IAsyncResult 结果)在 Microsoft.ServiceBus.NamespaceManager.OnEndSubscriptionExists( IAsyncResult 结果)在 Microsoft.ServiceBus.NamespaceManager.SubscriptionExists(String topicPath,String name)在 [remainder intentionally removed]

我希望对使用堆栈跟踪中提供的跟踪信息的任何机制有所启发。 谢谢!

我了解到应该避免使用 SubscriptionExists()。首选是执行 NamespaceManager.GetSubscription() 调用并捕获 MessagingEntityNotFoundException,以便将其丢弃。