Azure WebJob QueueTrigger重试策略

时间:2015-02-17 09:27:38

标签: azure azure-webjobssdk azure-storage-queues retrypolicy

我希望我的队列每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尝试时,队列将使用默认重试策略。 我错过了什么。

3 个答案:

答案 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);