Мне нужно создать высокопроизводительный клиент очереди ServiceBus, который может обрабатывать тысячи сообщений в секунду.Единственный способ, которым мне удалось это сделать, - это комбинация ReceiveMode.ReceiveAndDelete
и PrefetchCount
.
var client = new QueueClient(connectionString, queueName, ReceiveMode.ReceiveAndDelete);
client.PrefetchCount = 1000;
client.RegisterMessageHandler(ProcessMessagesAsync, new MessageHandlerOptions());
await Task.Delay(10000); // wait for 10s while some messages are processed
await client.CloseAsync();
Надежность не критична, поэтому я могу позволить себе потерять сообщения в случае сбоя моего приложения.Тем не менее, я бы хотел избежать потери сообщений во время изящных отключений, таких как вызов CloseAsync
выше.Я особенно хотел бы избежать потери сотен предварительно выбранных сообщений, которые находятся в локальном кэше.Есть ли способ заставить клиента ждать обработки предварительно выбранных сообщений, но прекратить получать новые?