Предварительная выборка сообщений служебной шины Azure

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

Включение предварительной выборки

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

Задайте свойство счетчика предварительных выборок для объектов ServiceBusReceiver и ServiceBusProcessor .

Примечание.

Пакет SDK для Java Script не поддерживает функцию предварительной выборки.

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

Почему предварительная выборка не является вариантом по умолчанию?

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

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

При использовании режима получения блокировки просмотра сообщения, полученные в буфер предварительной выборки, получаются в буфер в заблокированном состоянии. Для них применяется некоторое время ожидания. Если буфер предварительной выборки велик и обработка занимает так много времени, что срок блокировки для сообщений истекает в период хранения в буфере предварительной выборки или даже во время обработки приложением, могут возникать сложные и неоднозначные ситуации и события. Приложение может получить сообщение с просроченной или практически просроченной блокировкой. Тогда при его обработке приложение может обнаружить, что обработку завершить невозможно из-за истечения срока блокировки. Приложение может проверка LockedUntilUtc свойство (которое подлежит отклонению часов между брокером и локальными часами компьютера).

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

Если приложение явно отказывается от сообщения, сообщение может снова быть доступно для получения из очереди. Если предварительная выборка включена, сообщение снова извлекается в буфер предварительной выборки и помещается в конец. Так как сообщения из буфера предварительной выборки удаляются в порядке первого выхода (FIFO), приложение может получать сообщения вне порядка. Например, приложение может получить сообщение с идентификатором 2, а затем сообщение с идентификатором 1 (которое было отменено ранее) из буфера.

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

Максимальное число сообщений и длительность блокировки при предварительной выборке, настроенные для очереди или подписки, необходимо сбалансировать таким образом, чтобы время ожидания блокировки по крайней мере превышало общее ожидаемое время обработки сообщений при максимальном заполнении буфера предварительной выборки плюс одно сообщение. Но время ожидания блокировки сообщений не должно быть таким долгим, чтобы при случайной потере сообщения истекало максимальное значение срока его существования, иначе для повторной доставки придется ожидать истечения срока блокировки.

Следующие шаги

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

Примеры для старых клиентских библиотек .NET и Java:

30 сентября 2026 г. мы удалим библиотеки пакета SDK Служебная шина Azure WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus и com.microsoft.azure.servicebus, которые не соответствуют рекомендациям по пакету SDK Azure. Мы также завершим поддержку протокола SBMP, поэтому вы больше не сможете использовать этот протокол после 30 сентября 2026 года. Перейдите в последние библиотеки пакета SDK Azure, которые предлагают критически важные обновления системы безопасности и улучшенные возможности до этой даты.

Хотя старые библиотеки по-прежнему могут использоваться после 30 сентября 2026 года, они больше не будут получать официальную поддержку и обновления от Майкрософт. Дополнительные сведения см. в объявлении о выходе на пенсию в службу поддержки.