2

我想让我的队列每 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();

但是,当模拟失败的网络作业尝试时,队列使用默认的重试策略。我错过了一些东西。

4

3 回答 3

0

我想你可能会倒过来考虑这个问题。队列实际上并不执行行为。相反,我猜你想要做的是有一个配置为从队列中提取消息的 Web 作业,然后如果它由于某种原因无法处理来自队列的消息,则让 Web 作业在 90 分钟后重试。在这种情况下,您只需将隐身超时设置为 90 分钟(默认为 30 秒),这将确保如果消息未完全处理(即 - GetMessage 和 DeleteMessage 都被调用),那么消息将重新出现在90 分钟后排队。

查看此队列存储入门文档以获取更多信息。

于 2015-02-17T23:15:51.533 回答
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);
于 2017-07-13T17:30:31.990 回答
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 日志)

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

于 2015-10-28T13:05:28.663 回答