Azure WebJob QueueTrigger Retry Policy

泪湿孤枕 提交于 2019-12-24 04:26:11

问题


I would like to have my queue retry failed webjobs every 90 minutes and only for 3 attempts.

When creating the queue i use the following code

        CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
        IRetryPolicy linearRetryPolicy = new LinearRetry(TimeSpan.FromSeconds(5400), 3);
        queueClient.DefaultRequestOptions.RetryPolicy = linearRetryPolicy;
        triggerformqueue = queueClient.GetQueueReference("triggerformqueue");
        triggerformqueue.CreateIfNotExists();

However when simulating a failed webjob attempt the queue uses the default retry policy. I'm i missing something.


回答1:


I think you might be thinking about this backwards. Queues don't actually perform behavior. Instead what I am guessing you want to do is have a web job that is configured to pull messages from a queue and then if it fails to process the message from a queue for some reason have the web job retry 90 minutes later. In this case you just need to set the invisibility timeout to be 90 minutes (default is 30 seconds) which will ensure that if the message isn't fully processed (ie - GetMessage and DeleteMessage are both called) then the message will reappear on the queue 90 minutes later.

Take a look at this Getting Started with Queue Storage document for more information.




回答2:


There is something like Azure WebJobs SDK Extensions and ErrorTriggerAttribute (it isn't yet available in nuget 1.0.0-beta1 package, but you have access to public repository)

public static void ErrorMonitor( [ErrorTrigger("0:30:00", 10, Throttle = "1:00:00")] TraceFilter filter, TextWriter log)

https://github.com/Azure/azure-webjobs-sdk-extensions#errortrigger




回答3:


You need to use your RetryPolicy when you add an item to the queue, not on the queue itself, eg.

var queue = queueClient.GetQueueReference("myQueue");
queue.CreateIfNotExists();

options = new QueueRequestOptions { RetryPolicy = linearRetryPolicy };
await queue.AddMessageAsync(yourMessage, null, new TimeSpan(0, delayMinutes, 0), options, null);


来源:https://stackoverflow.com/questions/28558580/azure-webjob-queuetrigger-retry-policy

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!