2014-11-14 68 views
4

如果我使用Azure.Storage.QueueQueueTrigger属性可见性超时

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

试图用Azure.WebJobs(SDK时,我可以设置可见性超时,但是从队列得到一个消息0.4.0-测试版)的属性一webjob自动绑定到一个队列

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

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

回答

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找到。

+0

visibilityTimeout的参数值总是默认为0.我试着通过_queue.UpdateMessage(message,new TimeSpan(0,2,0),MessageUpdateFields.Visibility)来设置它。但这似乎并不影响价值。任何想法如何设置这个参数的第一位或如何实现它? – Proteux 2016-07-19 17:13:20

+0

在SDK的1.1.2版本中,visibilityTimeout被硬编码为10分钟,但在5分钟后,租约被扩展:https://github.com/Azure/azure-webjobs-sdk/blob/master/src/Microsoft .Azure.WebJobs.Host/Queues/Listeners/QueueListener.cs#L279-L289 – sjkp 2016-08-30 20:05:21

+0

@john我刚刚在一个全新的1.1.2 SDK应用程序中验证了自己,应用了以上所做的重写超时。我也用了1分钟。在我添加自定义队列处理器覆盖之前,该消息连续快速重试5次。随着重写,每分钟重试一次。所以放心,它的工作。我建议你在我们的repo https://github.com/Azure/azure-webjobs-sdk/issues上用完整的代码和repro步骤记录一个bug,这样我们可以找出你可能会出错的地方。 – mathewc 2017-02-07 01:29:37

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方法

希望这有助于!

+0

感谢看到10分钟的限制 - 我错过了。如果我没有得到任何关于能见度超时是否可以被覆盖的回应,那么我将采取它,因为它无法完成,并在这一点上将您的答案标记为正确的答案。谢谢 – 2014-12-04 20:42:01