我希望我的队列每90分钟重试失败的webjobs,并且只有3次尝试。
创建队列时,我使用以下代码
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
IRetryPolicy linearRetryPolicy = new LinearRetry(TimeSpan.FromSeconds(5400), 3);
queueClient.DefaultRequestOptions.RetryPolicy = linearRetryPolicy;
triggerformqueue = queueClient.GetQueueReference("triggerformqueue");
triggerformqueue.CreateIfNotExists();
但是,在模拟失败的webjob尝试时,队列将使用默认重试策略。 我错过了什么。
答案 0 :(得分:0)
我想你可能会倒退这个想法。队列实际上并不执行行为。相反,我猜你要做的是有一个配置为从队列中提取消息的Web作业,然后如果由于某种原因它无法从队列中处理消息,那么Web作业将在90分钟后重试。在这种情况下,您只需要将不可见性超时设置为90分钟(默认为30秒),这将确保如果消息未被完全处理(即 - 同时调用GetMessage和DeleteMessage),则消息将重新出现90分钟后在队列中。
请查看此Getting Started with Queue Storage文档以获取更多信息。
答案 1 :(得分:0)
Azure WebJobs SDK Extensions和ErrorTriggerAttribute之类的东西(在nuget 1.0.0-beta1包中尚未提供,但您可以访问公共存储库)
public static void ErrorMonitor( [ErrorTrigger(“0:30:00”,10,Throttle =“1:00:00”)] TraceFilter过滤器, TextWriter log)
https://github.com/Azure/azure-webjobs-sdk-extensions#errortrigger
答案 2 :(得分:0)
将项目添加到队列时,需要使用RetryPolicy,而不是队列本身,例如。
var queue = queueClient.GetQueueReference("myQueue");
queue.CreateIfNotExists();
options = new QueueRequestOptions { RetryPolicy = linearRetryPolicy };
await queue.AddMessageAsync(yourMessage, null, new TimeSpan(0, delayMinutes, 0), options, null);