【问题标题】:QueueTrigger Attribute Visibility TimeoutQueueTrigger 属性可见性超时
【发布时间】:2014-11-14 19:51:09
【问题描述】:

如果我要使用 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().Queues 中似乎没有选项。如果没有办法覆盖,那是标准的30秒吗?

【问题讨论】:

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


    【解决方案1】:

    在最新的 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

    【讨论】:

    • visibilityTimeout 的参数值始终默认为 0。我尝试通过 _queue.UpdateMessage(message, new TimeSpan(0, 2, 0), MessageUpdateFields.Visibility);但这似乎并没有影响价值。知道如何首先设置该参数或如何影响它吗?
    • 在 SDK 的 1.1.2 版本中,visibilityTimeout 被硬编码为 10 分钟,但 5 分钟后租约延长:github.com/Azure/azure-webjobs-sdk/blob/master/src/…
    • @john 我刚刚在一个全新的 1.1.2 SDK 应用程序中验证了自己,应用了您在上面所做的覆盖时的超时。我也用了1分钟。在我添加自定义队列处理器覆盖之前,该消息被快速连续重试了 5 次。使用覆盖,每分钟重试一次。所以请放心,它是有效的。我建议您在我们的 repo github.com/Azure/azure-webjobs-sdk/issues 中记录一个错误,并附上完整的代码和重现步骤,以便我们找出您可能出错的地方。
    • @mathewc 在发现有人在错误的 git 合并期间意外删除了自定义工厂的分配后,我删除了我以前的 cmets。很抱歉浪费您的时间。
    【解决方案2】:

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

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

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

    希望这会有所帮助!

    【讨论】:

    • 感谢您看到 10 分钟的限制 - 我错过了。如果我没有得到关于是否可以覆盖可见性超时的任何其他回复,那么我会接受它,因为它无法完成并将您的答案标记为此时的正确答案。谢谢
    猜你喜欢
    • 2013-10-25
    • 1970-01-01
    • 2015-12-07
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 2014-09-25
    • 2013-02-04
    相关资源
    最近更新 更多