Я реализовал триггер служебной шины, мой пример кода, как показано ниже.
public static async Task Run([ServiceBusTrigger("myqueue", Connection =
"myservicebus:cs")]BrokeredMessage myQueueItem, TraceWriter log)
{
try
{
if (myQueueItem.LockedUntilUtc <= DateTime.UtcNow)
{
log.Info($"Lock expired.");
return;
}
//renew lock if message lock is about to expire.
if ((myQueueItem.LockedUntilUtc - DateTime.UtcNow).TotalSeconds <= defaultLock)
{
await myQueueItem.RenewLockAsync();
return true;
}
//Process message logic
await myQueueItem.CompleteAsync();
}
catch (MessageLockLostException ex)
{
log.Error($"Message Lock lost. Exception: {ex}");
}
catch(CustomException ex)
{
//forcefully dead letter if custom exception occurs
await myQueueItem.DeadLetterAsync();
}
catch (Exception ex)
{
log.Error($"Error occurred while processing message. Exception: {ex}");
await myQueueItem.AbandonAsync();
}
}
Я установил длительность блокировки по умолчанию в очереди как 5 минут.
Я получаю исключение блокировки сообщений для нескольких запросов, хотя на самом деле блокировка не просрочена.
Время обработки запроса, как показано ниже:
- Триггер служебной шины сработал в: 07 мая 07:02:14 +00: 00 2018 utc
- LockedUntilUtc в посредническом сообщении: 07 мая 07: 07: 08.0149905 utc
- Исключение потерянной блокировки сообщения произошло в: 07 мая 07:02:18 +00: 00 2018 utc
Может кто-нибудь помочь мне выяснить, что на самом деле не так с моим кодом.
Спасибо.