C# Azure函数CloudQueue AddMessageAsync QueueRequestOptions LineareTropolicy不';我什么也不做
我正在尝试为云队列实现线性重试策略。以前,我在每个出列上都以编程方式管理重试逻辑,但我在QueueRequestOptions上看到了RetryPolicy成员,并认为我可以在第一次添加时设置重试策略,并让云队列自动管理重试。不幸的是,下面的代码似乎没有任何作用。它仍然几乎立即重试,并且重试了5次。我试着将它设置在“创建”上,但它也不起作用 我错过了什么 谢谢C# Azure函数CloudQueue AddMessageAsync QueueRequestOptions LineareTropolicy不';我什么也不做,c#,azure,azure-functions,C#,Azure,Azure Functions,我正在尝试为云队列实现线性重试策略。以前,我在每个出列上都以编程方式管理重试逻辑,但我在QueueRequestOptions上看到了RetryPolicy成员,并认为我可以在第一次添加时设置重试策略,并让云队列自动管理重试。不幸的是,下面的代码似乎没有任何作用。它仍然几乎立即重试,并且重试了5次。我试着将它设置在“创建”上,但它也不起作用 我错过了什么 谢谢 await cloudQueue.CreateIfNotExistsAsync(); var linearRetryPolicy =
await cloudQueue.CreateIfNotExistsAsync();
var linearRetryPolicy = new LinearRetry(TimeSpan.FromMinutes(5), 1);
var options = new QueueRequestOptions { RetryPolicy = linearRetryPolicy };
await cloudQueue.AddMessageAsync(new CloudQueueMessage(JsonConvert.SerializeObject(queueItem)), null, null, options, null);
RetryPolicy实际上是一个委托,在评估时返回Microsoft.WindowsAzure.StorageClient.ShouldRetry委托。它提供了一种轻量级机制,以受控方式构造状态完全重试实例。当每个操作开始时,它将评估RetryPolicy,这将导致CLR在幕后创建一个状态对象,其中包含用于配置策略的参数 简单线性重试策略示例
public static RetryPolicy LinearRetry(int retryCount, TimeSpan intervalBetweenRetries)
{
return () =>
{
return (int currentRetryCount, Exception lastException, out TimeSpan retryInterval) =>
{
// Do custom work here
// Set backoff
retryInterval = intervalBetweenRetries;
// Decide if we should retry, return bool
return currentRetryCount < retryCount;
};
};
}
符合Microsoft.WindowsAzure.StorageClient.ShouldRetry委托的签名,并将包含实现的详细信息
一旦构建了如上所述的重试策略,就可以通过配置客户端来使用它
Cloud[Table/Blob/Queue].Client.RetryPolicy = LinearRetry(<retryCount, intervalBetweenRetries>).
Cloud[Table/Blob/Queue].Client.RetryPolicy=LinearRetry()。
这对我有用。希望有帮助。我向一位同事询问了这一点,他建议重试策略可能与尝试将消息添加到队列有关,而不是与尝试处理来自队列的消息有关 我通过实现IRetryPolicy,然后在调用AddMessageSync之前禁用存储模拟器来测试这一点。在每次尝试将消息添加到队列失败后,都会调用Sure-enough ShouldRetry
希望这能帮助那些同样感到困惑的人。您好,这似乎不适用于我所处的情况,因为我在队列对象上没有客户机,而是ServiceClient。服务客户机没有RetryPolicy,尽管DefaultRequestOptions中有一个RetryPolicy,但它不接受委托,而是接受一个IRetryPolicy实例。谢谢你的帮助!
Cloud[Table/Blob/Queue].Client.RetryPolicy = LinearRetry(<retryCount, intervalBetweenRetries>).