Исключения обмена сообщениями концентраторов событий .NETEvent Hubs messaging exceptions - .NET

В этой статье перечислены некоторые исключения .NET, созданные библиотекой API .NET для обмена сообщениями служебной шины Azure, которая включает .NET Framework API концентраторов событий.This article lists some of the .NET exceptions generated by the Azure Service Bus messaging .NET API library, which includes .NET Framework Event Hubs APIs. Этот справочник может измениться, поэтому следите за обновлениями.This reference is subject to change, so check back for updates.

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

Интерфейсы API .NET концентраторов событий создают исключения, которые можно разделить на следующие категории, а также связанные действия, которые можно предпринять, чтобы попытаться исправить их.The Event Hubs .NET APIs generate exceptions that can fall into the following categories, along with the associated action you can take to try to fix them.

  1. Ошибка в коде пользователя: System.ArgumentException, System.InvalidOperationException, System.OperationCanceledException, System.Runtime.Serialization.SerializationException.User coding error: System.ArgumentException, System.InvalidOperationException, System.OperationCanceledException, System.Runtime.Serialization.SerializationException. Общее действие: прежде чем продолжить, попытайтесь исправить код.General action: try to fix the code before proceeding.
  2. Ошибка настройки или конфигурации: Microsoft.ServiceBus.Messaging.MessagingEntityNotFoundException, Microsoft.Azure.EventHubs.MessagingEntityNotFoundException, System.UnauthorizedAccessException.Setup/configuration error: Microsoft.ServiceBus.Messaging.MessagingEntityNotFoundException, Microsoft.Azure.EventHubs.MessagingEntityNotFoundException, System.UnauthorizedAccessException. Общее действие: проверьте конфигурацию и измените ее при необходимости.General action: review your configuration and change if necessary.
  3. Временные исключения: Microsoft.ServiceBus.Messaging.MessagingException, Microsoft.ServiceBus.Messaging.ServerBusyException, Microsoft.Azure.EventHubs.ServerBusyException, Microsoft.ServiceBus.Messaging.MessagingCommunicationException.Transient exceptions: Microsoft.ServiceBus.Messaging.MessagingException, Microsoft.ServiceBus.Messaging.ServerBusyException, Microsoft.Azure.EventHubs.ServerBusyException, Microsoft.ServiceBus.Messaging.MessagingCommunicationException. Общее действие: повторите операцию или уведомите пользователей.General action: retry the operation or notify users.
  4. Другие исключения: System.Transactions.TransactionException, System.TimeoutException, Microsoft.ServiceBus.Messaging.MessageLockLostException, Microsoft.ServiceBus.Messaging.SessionLockLostException.Other exceptions: System.Transactions.TransactionException, System.TimeoutException, Microsoft.ServiceBus.Messaging.MessageLockLostException, Microsoft.ServiceBus.Messaging.SessionLockLostException. Общее действие: связано с типом исключения; см. таблицу в следующем разделе.General action: specific to the exception type; refer to the table in the following section.

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

В следующей таблице перечислены типы исключений обмена сообщениями и их причины, а также рекомендуемые действия, которые можно выполнять.The following table lists messaging exception types, and their causes, and notes suggested action you can take.

Тип исключенияException Type Описание, причина, примерыDescription/Cause/Examples Рекомендуемое действиеSuggested Action Примечание к автоматическому или немедленному повторуNote on automatic/immediate retry
TimeoutExceptionTimeoutException Сервер не ответил на запрошенную операцию в течение указанного времени, которое задается параметром OperationTimeout.The server did not respond to the requested operation within the specified time, which is controlled by OperationTimeout. Возможно, сервер выполнил запрошенную операцию.The server may have completed the requested operation. Это исключение может произойти из-за сетевых или других задержек в инфраструктуре.This exception can happen due to network or other infrastructure delays. Проверьте состояние системы для обеспечения согласованности и при необходимости повторите попытку.Check the system state for consistency and retry if necessary.
Ознакомьтесь с разделом TimeoutException.See TimeoutException.
Повторная попытка может помочь в некоторых случаях. Добавьте в код логику повторных попыток.Retry might help in some cases; add retry logic to code.
InvalidOperationExceptionInvalidOperationException Запрошенная пользователем операция не допускается в пределах сервера или службы.The requested user operation is not allowed within the server or service. Подробные сведения см. в сообщении об исключении.See the exception message for details. Например, операция Complete создаст это исключение, если сообщение было получено в режиме ReceiveAndDelete.For example, Complete generates this exception if the message was received in ReceiveAndDelete mode. Проверьте код и обратитесь к документации.Check the code and the documentation. Убедитесь, что запрошенная операция допустима.Make sure the requested operation is valid. Повторная попытка не поможет.Retry will not help.
OperationCanceledExceptionOperationCanceledException Предпринята попытка вызвать операцию с объектом, который уже закрыт, прерван или удален.An attempt is made to invoke an operation on an object that has already been closed, aborted, or disposed. Иногда это означает, что внешняя транзакция уже удалена.In rare cases, the ambient transaction is already disposed. Проверьте код и убедитесь, что он не вызывает операции с удаленным объектом.Check the code and make sure it does not invoke operations on a disposed object. Повторная попытка не поможет.Retry will not help.
UnauthorizedAccessExceptionUnauthorizedAccessException Объекту TokenProvider не удалось получить маркер. Маркер является недопустимым или не содержит утверждений, необходимых для выполнения операции.The TokenProvider object could not acquire a token, the token is invalid, or the token does not contain the claims required to perform the operation. Убедитесь, что поставщик маркеров создан с использованием правильных значений.Make sure the token provider is created with the correct values. Проверьте конфигурацию службы контроля доступа.Check the configuration of the Access Control service. Повторная попытка может помочь в некоторых случаях. Добавьте в код логику повторных попыток.Retry might help in some cases; add retry logic to code.
ArgumentExceptionArgumentException
ArgumentNullExceptionArgumentNullException
ArgumentOutOfRangeExceptionArgumentOutOfRangeException
Для этого метода предоставлен один или несколько недопустимых аргументов.One or more arguments supplied to the method are invalid. Универсальный код ресурса (URI), переданный в NamespaceManager или Create, содержит сегменты пути.The URI supplied to NamespaceManager or Create contains path segment(s). В NamespaceManager или Create передана недопустимая схема универсального кода ресурса (URI).The URI scheme supplied to NamespaceManager or Create is invalid. Значение свойства превышает 32 КБ.The property value is larger than 32 KB. Проверьте вызывающий код и убедитесь, что аргументы заданы правильно.Check the calling code and make sure the arguments are correct. Повторная попытка не поможет.Retry will not help.
Microsoft.ServiceBus.Messaging MessagingEntityNotFoundExceptionMicrosoft.ServiceBus.Messaging MessagingEntityNotFoundException

Microsoft.Azure.EventHubs MessagingEntityNotFoundExceptionMicrosoft.Azure.EventHubs MessagingEntityNotFoundException
Сущность, связанная с операцией, не существует или была удалена.Entity associated with the operation does not exist or it has been deleted. Убедитесь, что сущность существует.Make sure the entity exists. Повторная попытка не поможет.Retry will not help.
MessagingCommunicationExceptionMessagingCommunicationException Клиент не может установить соединение с концентратором событий.Client is not able to establish a connection to Event Hub. Убедитесь, что имя узла указано правильно и узел доступен.Make sure the supplied host name is correct and the host is reachable. Повторная попытка может помочь при наличии периодических сбоев подключения.Retry might help if there are intermittent connectivity issues.
ServerBusyException Microsoft. ServiceBus. MessagingMicrosoft.ServiceBus.Messaging ServerBusyException

Microsoft.Azure.EventHubs ServerBusyExceptionMicrosoft.Azure.EventHubs ServerBusyException
В настоящее время служба не может обработать запрос.Service is not able to process the request at this time. Клиент может некоторое время подождать, после чего следует повторить операцию.Client can wait for a period of time, then retry the operation.
Ознакомьтесь с разделом ServerBusyException.See ServerBusyException.
Клиент может повторить операцию через определенный промежуток времени.Client may retry after certain interval. Если в результате повтора возникает другое исключение, проверьте поведение повтора этого исключения.If a retry results in a different exception, check retry behavior of that exception.
MessagingExceptionMessagingException Универсальное исключение обмена сообщениями, порождаемое в следующих случаях. Предпринята попытка создать QueueClient с использованием имени или пути, которые относятся к другому типу сущности (например, разделу).Generic messaging exception that may be thrown in the following cases: An attempt is made to create a QueueClient using a name or path that belongs to a different entity type (for example, a topic). Предпринята попытка отправить сообщение размером свыше 1 МБ.An attempt is made to send a message larger than 1 MB. Во время обработки запроса возникла ошибка сервера или службы.The server or service encountered an error during processing of the request. Подробные сведения см. в сообщении об исключении.See the exception message for details. Как правило, это временное исключение.This exception is usually a transient exception. Проверьте код и убедитесь, что для текста сообщения применяются только сериализуемые объекты (или используйте настраиваемый сериализатор).Check the code and ensure that only serializable objects are used for the message body (or use a custom serializer). Обратитесь к документации для получения сведений о поддерживаемых типах значений свойств и используйте только поддерживаемые типы.Check the documentation for the supported value types of the properties and only use supported types. Проверьте свойство IsTransient .Check the IsTransient property. Если оно имеет значение true, можно повторить операцию.If it is true, you can retry the operation. Алгоритм поведения не определен и может не помочь.Retry behavior is undefined and might not help.
MessagingEntityAlreadyExistsExceptionMessagingEntityAlreadyExistsException Предпринята попытка создать сущность с именем, которое уже используется другой сущностью в этом пространстве имен службы.Attempt to create an entity with a name that is already used by another entity in that service namespace. Удалите существующую сущность или выберите другое имя для сущности, которую нужно создать.Delete the existing entity or choose a different name for the entity to be created. Повторная попытка не поможет.Retry will not help.
QuotaExceededExceptionQuotaExceededException Сущность обмена сообщениями достигла максимально допустимого размера.The messaging entity has reached its maximum allowable size. Это исключение может произойти, если уже было открыто максимальное число получателей (равное 5) на группу потребителей.This exception can happen if the maximum number of receivers (which is 5) has already been opened on a per-consumer group level. Создайте в сущности пространство, получая сообщения из сущности или ее подочередей.Create space in the entity by receiving messages from the entity or its subqueues.
Ознакомьтесь с разделом QuotaExceededException.See QuotaExceededException
Повторная попытка может помочь, если сообщения были удалены.Retry might help if messages have been removed in the meantime.
MessagingEntityDisabledExceptionMessagingEntityDisabledException Выполнен запрос на операцию среды выполнения с отключенной сущностью.Request for a runtime operation on a disabled entity. Активируйте сущность.Activate the entity. Повторная попытка может помочь, если сущность была активирована.Retry might help if the entity has been activated in the interim.
Microsoft.ServiceBus.Messaging MessageSizeExceededExceptionMicrosoft.ServiceBus.Messaging MessageSizeExceededException

Microsoft.Azure.EventHubs MessageSizeExceededExceptionMicrosoft.Azure.EventHubs MessageSizeExceededException
Полезные данные сообщения превышают предел в 1 МБ.A message payload exceeds the 1 MB limit. Этот предел в 1 МБ является общим для сообщения, в который могут входить системные свойства и нагрузка .NET.This 1 MB limit is for the total message, which can include system properties and any .NET overhead. Сократите размер полезных данных сообщения, а затем повторите операцию.Reduce the size of the message payload, then retry the operation. Повторная попытка не поможет.Retry will not help.

QuotaExceededExceptionQuotaExceededException

QuotaExceededException указывает на превышение квоты для конкретного объекта.QuotaExceededException indicates that a quota for a specific entity has been exceeded.

Это исключение может произойти, если уже было открыто максимальное число получателей (5) на группу потребителей.This exception can happen if the maximum number of receivers (5) has already been opened on a per-consumer group level.

Концентраторы событийEvent Hubs

Центры событий имеют ограничение в 20 групп потребителей на один концентратор событий.Event Hubs has a limit of 20 consumer groups per Event Hub. При попытке создать больше групп появляется исключение QuotaExceededException.When you attempt to create more, you receive a QuotaExceededException.

TimeoutExceptionTimeoutException

TimeoutException указывает, что запущенная пользователем операция занимает больше времени, чем время ожидания операции.A TimeoutException indicates that a user-initiated operation is taking longer than the operation timeout.

Для Центров событий время ожидания указывается как часть строки подключения или с помощью ServiceBusConnectionStringBuilder.For Event Hubs, the timeout is specified either as part of the connection string, or through ServiceBusConnectionStringBuilder. Само сообщение об ошибке может отличаться, но оно всегда содержит значение времени ожидания, указанное для текущей операции.The error message itself might vary, but it always contains the timeout value specified for the current operation.

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

Существует две основные причины этой ошибки: неправильная конфигурация или временная ошибка службы.There are two common causes for this error: incorrect configuration, or a transient service error.

  1. Неправильная конфигурация. Время ожидания операции может быть слишком коротким для состояния операции.Incorrect configuration The operation timeout might be too small for the operational condition. Время ожидания операции в пакете SDK клиента по умолчанию составляет 60 секунд.The default value for the operation timeout in the client SDK is 60 seconds. Проверьте, не задано ли в вашем коде слишком маленькое значение.Check to see if your code has the value set to something too small. Учтите, что состояние сети и загрузка ЦП могут повлиять на время, необходимое для выполнения конкретной операции, поэтому не следует задавать маленькое значение времени ожидания операции.Note that the condition of the network and CPU usage can affect the time it takes for a particular operation to complete, so the operation timeout should not be set to a small value.
  2. Временная ошибка службы. Иногда обработка запросов в службе Центров событий выполняется с задержками, например в периоды интенсивной загрузки сети.Transient service error Sometimes the Event Hubs service can experience delays in processing requests; for example, during periods of high traffic. В таких случаях можно настроить повторную попытку выполнения операции через некоторое время до ее успешного завершения.In such cases, you can retry your operation after a delay, until the operation is successful. Если же операцию по-прежнему не удается выполнить после нескольких попыток, посетите сайт состояния служб Azure, чтобы получить сведения об известных простоях служб.If the same operation still fails after multiple attempts, visit the Azure service status site to see if there are any known service outages.

ServerBusyExceptionServerBusyException

Microsoft.ServiceBus.Messaging.ServerBusyException или Microsoft.Azure.EventHubs.ServerBusyException указывают на то, что сервер перегружен.A Microsoft.ServiceBus.Messaging.ServerBusyException or Microsoft.Azure.EventHubs.ServerBusyException indicates that a server is overloaded. Для этого исключения есть два соответствующих кода ошибки.There are two relevant error codes for this exception.

Код ошибки 50002Error code 50002

Эта ошибка может возникать по одной из двух причин:This error can occur for one of two reasons:

  1. Нагрузка неравномерно распределяется между всеми секциями в концентраторе событий, и в одной секции превышается локальное ограничение пропускной способности.The load is not evenly distributed across all partitions on the event hub, and one partition hits the local throughput unit limitation.

    Способы устранения: пересмотреть стратегию распределения секций или попробовать воспользоваться EventHubClient.Send(eventDataWithOutPartitionKey).Resolution: Revising the partition distribution strategy or trying EventHubClient.Send(eventDataWithOutPartitionKey) might help.

  2. Пространство имен Центров событий не имеет достаточного числа единиц пропускной способности (это можно проверить на портале Azure на экране Метрики в окне пространства имен Центров событий).The Event Hubs namespace does not have sufficient throughput units (you can check the Metrics screen in the Event Hubs namespace window in the Azure portal to confirm). На портале отображаются обобщенные (за 1 минуту) сведения, но мы измеряем пропускную способность в режиме реального времени, то есть это только оценка.The portal shows aggregated (1 minute) information, but we measure the throughput in real time – so it is only an estimate.

    Способы устранения: увеличить число единиц пропускной способности для пространства имен.Resolution: Increasing the throughput units on the namespace can help. Эту операцию можно выполнить на портале в окне Масштаб экрана пространства имен решения "Центры событий".You can do this operation on the portal, in the Scale window of the Event Hubs namespace screen. Можно также использовать автоматическое расширение.Or, you can use Auto-inflate.

Код ошибки 50001Error code 50001

Эта ошибка не должна возникать часто.This error should rarely occur. Она происходит, когда контейнеру, выполняющему код для пространства имен, не хватает ресурсов ЦП — всего за пару секунд до запуска подсистемы балансировки нагрузки Центров событий.It happens when the container running code for your namespace is low on CPU – not more than a few seconds before the Event Hubs load balancer begins.

Ограничить вызовы метода GetRuntimeInformationLimit on calls to the GetRuntimeInformation method

Концентраторы событий Azure поддерживают до 50 вызовов в секунду в Жетрунтимеинфо в секунду.Azure Event Hubs supports up to 50 calls per second to the GetRuntimeInfo per second. При достижении предела может появиться исключение, аналогичное следующему:You may receive an exception similar to the following one once the limit is reached:

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 : 50001. Please wait 10 seconds and try again.

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

Дополнительные сведения о Центрах событий см. в следующих источниках:You can learn more about Event Hubs by visiting the following links: