6

如果我要使用 Azure.Storage.Queue 从队列中获取消息

queue.GetMessage(TimeSpan.FromMinutes(20));

我可以设置可见性超时,但是当尝试使用 Azure.WebJobs (SDK 0.4.0-beta) 属性将 webjob 自动绑定到队列时

IE

public static void ProcessQueueMessage([QueueTrigger("myqueue")] string message){
       //do something with queue item
}

有没有办法在属性上设置可见性超时?JobHostConfiguration().Queues 中似乎没有选项。如果没有办法覆盖,那是标准的30秒吗?

4

2 回答 2

5

我有同样的问题,还没有找到答案。但是,要回答您的部分问题,默认租期是 10 分钟。

引用 Azure 网站:“当方法完成时,队列消息被删除。如果方法在完成之前失败,队列消息不会被删除;10 分钟租约到期后,释放消息以重新拾取并处理“

链接:http ://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk-get-started/ 部分:ContosoAdsWebJob - Functions.cs - GenerateThumbnail 方法

希望这可以帮助!

于 2014-12-04T13:45:44.247 回答
5

在最新的 v1.1.0 版本中,您现在可以通过JobHostConfiguration.Queues.QueueProcessorFactory注册自己的自定义QueueProcessor实例来控制可见性超时。这使您可以全局或按队列/功能控制高级消息处理行为。

例如,要设置失败消息的可见性,您可以覆盖ReleaseMessageAsync,如下所示:

protected override async Task ReleaseMessageAsync(CloudQueueMessage message, FunctionResult result, TimeSpan visibilityTimeout, CancellationToken cancellationToken)
{
    // demonstrates how visibility timeout for failed messages can be customized
    // the logic here could implement exponential backoff, etc.
    visibilityTimeout = TimeSpan.FromSeconds(message.DequeueCount);

    await base.ReleaseMessageAsync(message, result, visibilityTimeout, cancellationToken);
}

更多详细信息可以在此处的发行说明中找到。

于 2015-12-04T17:09:04.940 回答