Сервисная шина Azure MessageReceiver.ReceivAsync возвращает ноль - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть функция лазури, которая срабатывает каждые 1 минуту.Функция создает MessageReceiver следующим образом:

var messageReceiver = new MessageReceiver(serviceBusConnectionString, entityPath, ReceiveMode.PeekLock, null, 0);

Подписка имеет продолжительность блокировки 1 минуту.Затем он пытается извлечь до 100 сообщений из подписки следующим образом:

var allMessages = new List<Message>();
Message message;

do {
    message = await messageReceiver.ReceiveAsync(TimeSpan.FromSeconds(2));
    if (message != null) allMessages.Add(message);
} while (message != null && allMessages.Count() < 100);

После обработки сообщения завершаются с использованием messageReceiver.CompleteAsync, а приемник сообщений закрывается с использованием messageReceiver.CloseAsync().

При первом запуске функции она получает до 100 сообщений из подписки, но при следующих запусках она получает только 0 или 1 сообщение независимо от количества сообщений, доступных в подписке (Service Bus Explorer показывает, что> 10 сообщений вподписка).Таким образом, кажется, что ReceiveAsync возвращает ноль, даже когда есть доступные сообщения.

Увеличение времени ожидания для ReceiveAsync, похоже, не помогает.

Почему ReceiveAsync возвращает ноль, когда есть доступные сообщения?

1 Ответ

0 голосов
/ 14 ноября 2018

Я нашел решение или обходной путь. Если я изменяю раздел служебной шины, чтобы запретить разбиение (требуется удалить раздел и создать его заново), ReceiveAsync всегда возвращает сообщение, когда сообщение доступно.

Проблемы, связанные с этой проблемой Нечетное поведение Azure Service Bus ReceiveBatch ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...