Бөлісу құралы:


Исключения при обмене сообщений с использованием Центров событий – .NET (прежние версии)

В этой статье перечислены исключения для .NET, созданные с использованием программных интерфейсов .NET Framework.

Важно!

Некоторые из исключений, перечисленных в статье, относятся только к библиотеке Центров событий .NET прежних версий. Например: исключения Microsoft.ServiceBus.*

Сведения об исключении EventHubsException, возникающем в новой библиотеке .NET, см. в статье EventHubsException – .NET.

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

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

Категории исключений

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

Типы исключений

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

Тип исключения Описание, причина, примеры Рекомендуемое действие Примечание к автоматическому или немедленному повтору
TimeoutException Сервер не ответил на запрошенную операцию в течение указанного времени, контролируемого параметром OperationTimeout. Возможно, сервер выполнил запрошенную операцию. Это исключение может произойти вследствие сетевых или других задержек в инфраструктуре. Проверьте состояние системы для обеспечения согласованности и при необходимости повторите попытку.
Ознакомьтесь с разделом TimeoutException.
Повторная попытка может помочь в некоторых случаях. Добавьте в код логику повторных попыток.
InvalidOperationException Запрошенная пользователем операция не разрешается для выполнения в пределах сервера или службы. Подробные сведения см. в сообщении об исключении. Например, операция Complete создаст это исключение, если сообщение было получено в режиме ReceiveAndDelete. Проверьте код и обратитесь к документации. Убедитесь, что запрошенная операция допустима. Выполнение повторной попытки нецелесообразно.
OperationCanceledException Предпринята попытка вызвать операцию с объектом, который уже закрыт, прерван или удален. Иногда это означает, что внешняя транзакция уже удалена. Проверьте код и убедитесь, что он не вызывает операции с использованием удаленного объекта. Выполнение повторной попытки нецелесообразно.
UnauthorizedAccessException Объекту TokenProvider не удалось получить токен, токен является недопустимым или не содержит утверждений, необходимых для выполнения этой операции. Убедитесь, что поставщик маркеров создан с использованием правильных значений. Проверьте конфигурацию службы контроля доступа. Повторная попытка может помочь в некоторых случаях. Добавьте в код логику повторных попыток.
ArgumentException
ArgumentNullException
ArgumentOutOfRangeException
Для этого метода предоставлен один или несколько недопустимых аргументов. Универсальный код ресурса (URI), переданный в NamespaceManager или Create, содержит сегменты пути. В NamespaceManager или Create передана недопустимая схема универсального кода ресурса (URI). Значение свойства превышает 32 КБ. Проверьте вызывающий код и убедитесь, что аргументы заданы правильно. Повторная попытка не поможет.
Microsoft.ServiceBus.Messaging MessagingEntityNotFoundException

Microsoft.Azure.EventHubs MessagingEntityNotFoundException
Сущность, связанная с операцией, не существует или была удалена. Убедитесь, что сущность существует. Повторная попытка не поможет.
MessagingCommunicationException Клиент не может установить подключение к центрам событий. Убедитесь, что имя узла указано правильно и узел доступен. Повторная попытка может помочь при наличии периодических сбоев подключения.
Microsoft.ServiceBus.Messaging ServerBusyException

Microsoft.Azure.EventHubs ServerBusyException
В настоящее время служба не может обработать запрос. Клиент может некоторое время подождать, после чего следует повторить операцию.
Ознакомьтесь с разделом ServerBusyException.
Клиент может повторить операцию через определенный промежуток времени. Если в результате повтора возникает другое исключение, проверьте поведение повтора этого исключения.
MessagingException Универсальное исключение обмена сообщениями, которое может быть вызвано в следующих случаях: предпринята попытка создать QueueClient с использованием имени или пути, которые относятся к другому типу сущности (например, разделу). Предпринята попытка отправить сообщение размером свыше 1 МБ. Во время обработки запроса возникла ошибка сервера или службы. Подробные сведения см. в сообщении об исключении. Как правило, это временное исключение. Проверьте код и убедитесь, что для текста сообщения применяются только сериализуемые объекты (или используйте настраиваемый сериализатор). Обратитесь к документации для получения сведений о поддерживаемых типах значений свойств и используйте только поддерживаемые типы. Проверьте свойство IsTransient . Если оно имеет значение true, можно повторить операцию. Алгоритм поведения не определен и может не помочь.
MessagingEntityAlreadyExistsException Предпринята попытка создать сущность с именем, которое уже используется другой сущностью в этом пространстве имен службы. Удалите существующую сущность или выберите другое имя для сущности, которую нужно создать. Повторная попытка не поможет.
QuotaExceededException Сущность обмена сообщениями достигла максимально допустимого размера. Это исключение может произойти, если уже было открыто максимальное число получателей (равное 5) на группу потребителей. Создайте в сущности пространство, получая сообщения из сущности или ее подочередей.
Ознакомьтесь с разделом QuotaExceededException.
Повторная попытка может помочь, если сообщения были удалены.
MessagingEntityDisabledException Выполнен запрос на операцию среды выполнения с отключенной сущностью. Активируйте сущность. Повторная попытка может помочь, если сущность была активирована.
Microsoft.ServiceBus.Messaging MessageSizeExceededException

Microsoft.Azure.EventHubs MessageSizeExceededException
Полезные данные сообщения превышают предел в 1 МБ. Этот предел в 1 МБ является общим для сообщения, в него могут входить системные свойства и служебные данные .NET. Сократите размер полезных данных сообщения, а затем повторите операцию. Повторная попытка не поможет.

QuotaExceededException

QuotaExceededException указывает на превышение квоты для конкретного объекта.

Это исключение может произойти, если уже было открыто максимальное число получателей (5) на группу потребителей.

Event Hubs

Центры событий имеют ограничение в 20 групп потребителей на центры событий. При попытке создать больше групп появляется исключение QuotaExceededException.

TimeoutException

TimeoutException указывает, что запущенная пользователем операция занимает больше времени, чем время ожидания операции.

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

Ожидается, что тайм-ауты будут происходить во время или между операциями обслуживания, например во время обновления службы Центров событий или обновления ОС на ресурсах, которые используются службой. Во время обновлений ОС объекты перемещаются, а узлы обновляются или перезагружаются, в результате чего могут возникать тайм-ауты. Подробные сведения о соглашении по уровню обслуживания (SLA) для службы Центров событий Azure см. в статье SLA для Центров событий.

Основные причины

Существует две основные причины этой ошибки: неправильная конфигурация или временная ошибка службы.

  • Неправильная конфигурация. Время ожидания операции может быть слишком коротким для состояния операции. Время ожидания операции в пакете SDK клиента по умолчанию составляет 60 секунд. Проверьте, не задано ли в вашем коде слишком маленькое значение. Состояние сети и загрузка ЦП могут повлиять на время, необходимое для выполнения определенных операций, поэтому не следует для тайм-аута задавать невысокое значение.
  • Временная ошибка службы. Иногда служба "Центры событий" может испытывать задержки при обработке запросов, например в периоды интенсивной загрузки сети. В таких случаях можно настроить повторную попытку выполнения операции через некоторое время до ее успешного завершения. Если же операцию по-прежнему не удается выполнить после нескольких попыток, посетите сайт состояния служб Azure, чтобы получить сведения об известных простоях служб.

ServerBusyException

Microsoft.ServiceBus.Messaging.ServerBusyException или Microsoft.Azure.EventHubs.ServerBusyException указывают на то, что сервер перегружен. Для этого исключения есть два соответствующих кода ошибки.

Код ошибки 50002

Эта ошибка может возникать по одной из двух причин:

  • Нагрузка неравномерно распределяется по всем разделам Центра событий, и в одном разделе достигается значение локального ограничения пропускной способности.

    Способ устранения: пересмотреть стратегию распределения нагрузки по разделам или попробовать использовать параметр EventHubClient.Send(eventDataWithOutPartitionKey).

  • Пространство имен Центров событий не имеет достаточного количества единиц пропускной способности (это можно проверить на экран Метрики в окне пространства имен Центров событий на портале Azure). На портале отображаются обобщенные (за 1 минуту) сведения, но пропускная способность не измеряется в режиме реального времени, то есть это только оценка.

    Способ устранения: увеличить количество единиц пропускной способности для пространства имен.

    Можно настроить количество единиц пропускной способности в разделе Масштаб или Обзор на странице Центры событий портала Azure. Также можно использовать функцию автоматического расширения, которая автоматически выполняет масштабирование за счет увеличения количества единиц пропускной способности в соответствии с потребностями использования.

    Единицы пропускной способности применяются ко всем Центрам событий в пространстве имен Центров событий. Это означает, что единицы пропускной способности приобретаются на уровне пространства имен и совместно используются всеми Центрами событий в этом пространстве имен. Каждая единица пропускной способности предоставляет следующие возможности для пространства имен:

    • до 1 МБ в секунду входящих событий (событий, отправленных в концентратор событий), но не более 1000 входящих событий, операций управления или контролирующих вызовов API в секунду;
    • До 2 МБ в секунду исходящих событий (событий, полученных от концентратора событий), но не более 4096 исходящих событий.
    • До 84 ГБ хранилища событий (достаточно для периода хранения по умолчанию 1 час).

    На странице Обзор в разделе Показать метрики выберите вкладку Пропускная способность. Выберите диаграмму для открытия в окне большего размера с интервалом по оси x в 1 минуту. Просмотрите пиковые значения и разделите их на 60, чтобы получить значения скорости передачи в байт/с для входящего и исходящего трафика. Используя аналогичный подход, рассчитайте количество запросов в секунду во время наблюдения пиковых значений на вкладке Запросы.

    Если значения превышают предельное количество единиц пропускной способности* (1 МБ/с для входящего трафика или 1000 запросов для входящего трафика в секунду, 2 МБ/с для исходящего трафика), увеличьте количество единиц пропускной способности с помощью параметра Масштаб (в меню слева) на странице пространства имен Центров событий, чтобы вручную увеличить масштаб или использовать функцию автоматического расширения Центров событий. При ручном масштабировании или автоматическом масштабировании пространства имен можно масштабировать до 40 единиц.

Код ошибки 50008

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

Способ устранения: ограничьте количество вызовов с использованием метода GetRuntimeInformation. Центры событий Azure поддерживают до 50 вызовов GetRuntimeInfo в секунду для каждой группы потребителей. При достижении предела можно получить исключение, подобное следующему.

ExceptionId: 00000000000-00000-0000-a48a-9c908fbe84f6-ServerBusyException: The request was terminated because the namespace 75248:aaa-default-eventhub-ns-prodb2b is being throttled. Error code : 50008. Please wait 10 seconds and try again.

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

Дополнительные сведения о Центрах событий см. в следующих источниках: