今天在一个客户那里,我们分析了前几周的日志,我们发现了以下关于 Windows Azure 服务总线队列的问题:
由于实体受到限制,请求已终止。请等待 10 秒,然后重试。
在验证了代码后,我告诉他们使用瞬态故障处理应用程序块 (TOPAZ) 来实现这样的重试策略:
var retryStrategy = new Incremental(5, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2));
var retryPolicy = new RetryPolicy<ServiceBusTransientErrorDetectionStrategy>(retryStrategy);
客户回答:
“啊,太好了,所以它还可以处理在节流时它应该等待 10 秒的事实。”
想一想,我从来没有验证过是否是这样。我一直以为是这样。在Microsoft.Practices.EnterpriseLibrary.WindowsAzure.TransientFaultHandling程序集中,我查找了在节流情况下会等待 10 秒但没有找到任何内容的代码。
这是否意味着 TOPAZ 不足以创建弹性应用程序?这是否应该与一些自定义代码结合使用来处理限制(即:在发生特定异常时等待 10 秒)?