У меня есть консольное приложение для чтения всех сообщений через посредника, присутствующих в подписке в служебной шине Azure. У меня там около 3500 сообщений. Это мой код для чтения сообщений:
SubscriptionClient client = messagingFactory.CreateSubscriptionClient(topic, subscription);
long count = namespaceManager.GetSubscription(topic, subscription).MessageCountDetails.ActiveMessageCount;
Console.WriteLine("Total messages to process : {0}", count.ToString()); //Here the number is showing correctly
IEnumerable<BrokeredMessage> dlIE = null;
dlIE = client.ReceiveBatch(Convert.ToInt32(count));
Когда я выполняю код в dlIE, я вижу только 256 сообщений. Я также попытался указать счетчик предварительной выборки, как этот client.PrefetchCount
, но тогда он также возвращает только 256 сообщений.
Я думаю, что есть некоторое ограничение на количество сообщений, которые можно получить за один раз, однако на странице msdn для метода RecieveBatch
ничего подобного не упоминается. Что я могу сделать, чтобы получать все сообщения за раз?
Примечание.
Я хочу только прочитать сообщение, а затем оставить его на служебной шине. Поэтому я не использую
message.complete
метод.Я не могу удалить и заново создать тему / подписку из служебной шины.
Изменить:
Я использовал PeekBatch вместо ReceiveBatch вот так:
IEnumerable<BrokeredMessage> dlIE = null;
List<BrokeredMessage> bmList = new List<BrokeredMessage>();
long i = 0;
dlIE = subsciptionClient.PeekBatch(Convert.ToInt32(count)); // count is the total number of messages in the subscription.
bmList.AddRange(dlIE);
i = dlIE.Count();
if(i < count)
{
while(i < count)
{
IEnumerable<BrokeredMessage> dlTemp = null;
dlTemp = subsciptionClient.PeekBatch(i, Convert.ToInt32(count));
bmList.AddRange(dlTemp);
i = i + dlTemp.Count();
}
}
У меня в подписке 3255 сообщений. При первом вызове peekBatch он получает 250 сообщений. поэтому он переходит в цикл while с PeekBatch(250,3225)
. Каждый раз приходит только 250 сообщений. Окончательное общее количество сообщений, которые у меня есть в списке вывода, составляет 3500 с дубликатами. Я не могу понять, как это происходит.