Azure Service Bus Queue - операция недопустима из-за текущего состояния объекта - PullRequest
0 голосов
/ 23 января 2020

Я использую Azure Очереди служебной шины в одном из моих основных приложений net для получения сообщений из очереди в порядке FIFO. Получив сообщение из очереди, я обработал бизнес-логику c с каждым сообщением. После обработки бизнес-логики c с каждым сообщением я пытаюсь удалить сообщение из очереди со следующей строкой кода:

await _messageReceiver.CompleteAsync(message.SystemProperties.LockToken);

Но из-за нескольких сообщений я не могу удалить сообщения из Очередь. Поскольку блокировка сообщения истекла, хотя я настроил «Длительность блокировки» в течение 3 минут в очереди служебной шины.

При удалении / завершении сообщения из очереди служебной шины появляется следующая ошибка:

Тип исключения: System.InvalidOperationException

Сообщение об исключении: операция недопустима из-за текущего состояния объекта.

Это свойства, которые я настроил на Azure Service Bus Queue:

Max Delivery Count =1
Lock Duration=3 minutes

1 Ответ

0 голосов
/ 15 февраля 2020

Существует несколько причин, по которым вы не можете удалить сообщения в Azure Очередь служебной шины.

Вызов с длительностью блокировки

Первый вызов Время, в частности, длительность блокировки для каждого сообщения после его получения. Проблема заключается в том, что сообщения должны отображаться в пользовательском интерфейсе, а затем предоставлять клиенту время для выбора сообщений для повторной отправки или удаления. Решение состоит в том, чтобы попросить клиента увеличить продолжительность блокировки, но это невозможно по нескольким причинам. Во-первых, увеличение длительности блокировки может оказаться невозможным из-за интеграции с клиентами, поэтому мы не можем зависеть от этого.

Подробнее о том, как преодолеть проблему, читайте в этом посте .

...