Поделиться через


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

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

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

Задайте свойство счетчика предварительного набора для объектов ServiceBusReceiverOptions и ServiceBusProcessorOptions .

Примечание.

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

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

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

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

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

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

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

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

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

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

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

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