2015-07-06 2 views
6

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

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

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

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

Есть ли способ установить это следующееVisibleTime на несколько секунд?

Create a .NET WebJob in Azure App Service

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

How to use Azure queue storage with the WebJobs SDK

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

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

ответ

0

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

+0

Привет! Да, я вижу это поведение, но это сообщение будет перерабатываться только через 10 минут, как я уже упоминал в своем вопросе. Я хочу изменить это время на 10 секунд. – Anuar

+0

Вы можете связать с CloudQueueMessage и установить тайм-аут видимости следующим образом: public static void Hi ([QueueTrigger («invisible»)] Сообщение CloudQueueMessage) { throw new Exception («Привет»); } –

5

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

Более подробную информацию можно найти в release notes here.

Смежные вопросы