Пакетная или отмена обработки очереди обслуживания Azure

Как отменить обработку или обработку указанного числа сообщений очереди для очереди служебной шины Azure с использованием DotNet SDK без увеличения числа доставок? Увеличение количества Доставок заставляет вещи входить в сообщение мертвой буквы

Следуя этим указаниям, используя QueueClient вместо SubscriptionClient, я смог написать два консольных приложения: отправителя и получателя очередей служебной шины. Если я хочу обрабатывать вещи в очереди в пакетном режиме (например, каждую минуту, когда я хочу обработать 100 элементов очереди или каждый минутный запрос 100 элементов очереди), как бы я изящно отменил обработку, которая происходит после вызова RegisterMessageHandler(event, cancellationToken)?


//throws System.OperationCanceledException exception so the DeliveryCount goes up
await queueClient.CloseAsync(); 
//throws Microsoft.Azure.ServiceBus.MessageNotFoundException exception so DeliveryCount also goes up 
await queueClient.CancelScheduledMessageAsync(message.SystemProperties.SequenceNumber); 

Я попытался следовать рекомендациям по предварительной выборке, но это, похоже, действует как "буфер" для количества запросов, а не для общего пакета.

1 ответ

CancelScheduledMessageAsync() неправильный API для использования, поскольку он не отменяет обработку.

При получении сообщений клиентом количество доставки всегда будет увеличиваться. Независимо от того, было ли сообщение успешно обработано или обработка была отменена. Единственная операция, которая не увеличивает количество доставок, это сбор, но вы не можете заблокировать сообщение для обработки.

Я бы порекомендовал посмотреть, как настроить MaxDeliveryCount для размещения обработки, которая может быть отменена.

Другие вопросы по тегам