QueueTrigger属性可见性超时

时间:2014-11-14 19:51:10

标签: azure azure-queues azure-storage-queues

如果我使用Azure.Storage.Queue

从队列中获取消息
queue.GetMessage(TimeSpan.FromMinutes(20));

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

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

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

2 个答案:

答案 0 :(得分: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);
}

更多详细信息,请参阅release notes here

答案 1 :(得分:4)

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

引用Azure网站:“当方法完成时,队列消息将被删除。如果方法在完成之前失败,则不会删除队列消息;在10分钟的租约到期后,消息将被释放以便获取如果消息总是导致异常,则该序列将不会无限重复。在5次尝试处理消息失败后,消息将被移动到名为{queuename} -poison的队列。最大尝试次数是可配置的。“

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

希望这有帮助!