语言:C#
框架:.NET CORE 1.1.1
Nuget:WindowsAzure.Storage版本8.1.1
您好,
我在Azure上使用队列存储。 我有4个程序,每个请求每秒1次(GetMessagesAsync请求)。 所以我提出4个请求/秒。
但有时会出现导致此异常的限制错误:
System.AggregateException:发生了一个或多个错误。 (服务器是 忙。)---> Microsoft.WindowsAzure.Storage.StorageException:The 服务器很忙。\ r \ n at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.d__4`1.MoveNext(个)\ r \ n --- 从抛出异常的先前位置开始的堆栈跟踪结束 --- \ r \ n在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)\ r \ n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\ r \ n at Microsoft.WindowsAzure.Storage.Queue.CloudQueue<> c__DisplayClass83_0< b__0> d.MoveNext(个)\ r \ n
我不知道为什么我会收到此错误,因为单个队列的Azure目标吞吐量高达每秒2000条消息。
其他信息:
我的功能我在哪里获取:
protected async Task<IEnumerable<CloudQueueMessage>> GetAndDequeueMessagesAsync(int numberOfMessagesToRetrived = 1) {
try
{
IEnumerable<CloudQueueMessage> messages = await GetMessagesAsync(numberOfMessagesToRetrived);
foreach (CloudQueueMessage queueMessage in messages)
{
await DequeueMessageAsync(queueMessage);
}
return messages;
}
catch (Exception e)
{
return new List<CloudQueueMessage>();
}
}
由于
答案 0 :(得分:1)
根据您的描述,我想原因是存储服务移动分区以改善负载平衡。
据我所知,azure存储分区服务器不只是托管一个分区(queue \ table partition-key),它将托管多个分区。
如果分区服务器收到太多请求,azure存储将自动改善负载平衡。
它会将一些分区移动到另一个分区服务器。如果在移动分区时发送reqeust,则会返回503错误。
有关天蓝色存储如何改善负载平衡的更多详细信息。你可以参考这个azure storage SOSP article's 5.5.1 Load Balance Operation Details 。
我建议您使用存储客户端库实施重试策略,以使您的程序正常运行。
更多细节,您可以参考以下文章: Microsoft.WindowsAzure.Storage.RetryPolicies Namespace