Установите nextVisibleTime в пакете SDK для веб-заданий Azure

Я использую веб-задания Azure для обработки сообщений из очереди.

Я видел, что пакет SDK для веб-заданий снова обрабатывает любое неудачное сообщение через 10 минут, и, если он терпит неудачу 5 раз, он перемещает его в опасную очередь (1).

Также я могу видеть nextVisibleTime сообщения в очереди, то есть через 10 минут после InsertTime (2).

Я хочу использовать обработку ошибок AzureSDK для сообщений, но не могу ждать 10 минут, пока сообщение будет обработано снова.

Есть ли способ установить для nextVisibleTime несколько секунд?

Создание веб-задания .NET. в службе приложений Azure

Если метод не выполняется до завершения, сообщение очереди не удаляется; по истечении 10-минутного периода аренды сообщение отправляется для повторной обработки и обработки.

Как использовать хранилище очередей Azure с SDK WebJobs

public static void WriteLog([QueueTrigger("logqueue")] string logMessage,
    DateTimeOffset expirationTime,
    DateTimeOffset insertionTime,
    DateTimeOffset nextVisibleTime,

Примечание. Здесь, в StackOverflow, есть похожие вопросы, но без ответа:


person Anuar    schedule 06.07.2015    source источник


Ответы (2)


В последней версии v1.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

Если при обработке вашей функции возникнет исключение, SDK немедленно поместит сообщение обратно в очередь, и сообщение будет повторно обработано. Вы не замечаете такого поведения?

person pranav rastogi    schedule 06.07.2015
comment
Привет! Да, я наблюдаю такое поведение, но это сообщение будет повторно обработано только через 10 минут, как я уже упоминал в своем вопросе. Я хочу изменить это время на 10 секунд. - person Anuar; 07.07.2015
comment
Вы можете выполнить привязку к CloudQueueMessage и установить тайм-аут видимости следующим образом: public static void Hi ([QueueTrigger (invisible)] CloudQueueMessage message) {throw new Exception (Hi); } - person pranav rastogi; 07.07.2015