Согласитесь с @DavidG, попробуйте использовать триггер очереди для достижения своей цели.W может полагаться на настройку хоста очереди.
visibilityTimeout is Интервал времени между повторными попытками при сбое обработки сообщения. MaxDequeueCount: Количество попыток обработки сообщения перед его перемещением в очередь нежелательных сообщений.
{
"version": "2.0",
"extensions": {
"queues": {
"visibilityTimeout" : "00:05:00",
"maxDequeueCount": 2,
}
}
}
Таким образом, функция должна выглядеть следующим образом:
public static async Task Run(
[QueueTrigger("domain-verificate-Office365-add-services-get-mx-record")]string myQueueItem, ILogger log,
[Queue("domain-add-mx-record-to-registrator", Connection = "StorageConnectionString")]IAsyncCollector<string> outputQueue
)
{
// do stuff then output message
await outputQueue.AddAsync(myQueueItem);
}
Если вы не хотите выдавать исключение на хост, мы можем обратиться к initialVisibilityDelay метода CloudQueue.
с указанием интервала времени, в течение которого сообщение будет невидимым
public static async Task Run(
[QueueTrigger("domain-verificate-Office365-add-services-get-mx-record")]string myQueueItem, ILogger log,
[Queue("domain-add-mx-record-to-registrator", Connection = "StorageConnectionString")]IAsyncCollector<string> outputQueue,
[Queue("domain-verificate-Office365-add-services-get-mx-record", Connection = "StorageConnectionString")]CloudQueue listenQueue
)
{
try
{
// do stuff then output message
await outputQueue.AddAsync(myQueueItem);
}
catch(DomainVerificationRecordNotFoundException)
{
// add the message in current queue and can only be visible after 5 minutes
await listenQueue.AddMessageAsync(new CloudQueueMessage(myQueueItem), null, TimeSpan.FromMinutes(5), null, null);
}
}