Время ожидания видимости атрибута QueueTrigger

Если бы я получил сообщение из очереди, используя Azure.Storage.Queue

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

Я могу установить время ожидания видимости, однако при попытке использовать атрибуты Azure.WebJobs (SDK 0.4.0-beta) для автоматической привязки веб-задания к очереди

i.e.

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

Есть ли способ установить время ожидания видимости атрибута? Кажется, в JobHostConfiguration().Queues нет опции. Если нет возможности переопределить, то это стандартные 30 секунд?


person GUID_33    schedule 14.11.2014    source источник


Ответы (2)


В последнем выпуске версии 1.1.0 вы теперь можете контролировать время ожидания видимости, регистрируя свои собственные экземпляры QueueProcessor через JobHostConfiguration.Queues.QueueProcessorFactory. Это позволяет управлять поведением расширенной обработки сообщений глобально или для каждой очереди/функции.

Например, чтобы настроить видимость сообщений с ошибками, можно переопределить 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);
}

Дополнительные сведения можно найти в примечаниях к выпуску здесь.

person mathewc    schedule 04.12.2015
comment
значение параметра visibilityTimeout всегда по умолчанию равно 0. Я пытался установить его через _queue.UpdateMessage(message, new TimeSpan(0, 2, 0), MessageUpdateFields.Visibility); но это, кажется, не влияет на значение. есть идеи, как этот параметр устанавливается в первую очередь или как на него повлиять? - person Proteux; 19.07.2016
comment
В версии SDK 1.1.2 для параметра visibilityTimeout жестко задано значение 10 минут, но через 5 минут срок аренды продлевается: github.com/Azure/azure-webjobs-sdk/blob/master/src/ - person sjkp; 30.08.2016
comment
@mathewc Я удалил свои предыдущие комментарии после того, как узнал, что кто-то случайно удалил назначение пользовательской фабрики во время неудачного слияния git. Извините, что потратил ваше время. - person Llama; 07.02.2017

У меня такой же вопрос и ответа пока не нашел. Но, чтобы ответить на часть вашего вопроса, аренда по умолчанию составляет 10 минут.

Цитата с веб-сайта Azure: «Когда метод завершается, сообщение очереди удаляется. Если метод завершается с ошибкой до завершения, сообщение очереди не удаляется; по истечении 10-минутного срока аренды сообщение освобождается для повторного получения и обработки. . Эта последовательность не будет повторяться бесконечно, если сообщение всегда вызывает исключение. После 5 неудачных попыток обработать сообщение сообщение перемещается в очередь с именем {queuename}-poison. Максимальное количество попыток можно настроить."

Ссылка: http://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk-get-started/ Раздел: ContosoAdsWebJob — Functions.cs — метод GenerateThumbnail

Надеюсь это поможет!

person DataGeek    schedule 04.12.2014
comment
спасибо, что увидели этот 10-минутный лимит - я пропустил это. Если я не получу никакого другого ответа о том, можно ли переопределить тайм-аут видимости, я буду считать, что это невозможно, и отмечу ваш ответ как правильный ответ на данном этапе. Спасибо - person GUID_33; 04.12.2014