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


Устранение неполадок Центров событий Azure

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

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

Обработка исключений в Event Hubs

Все исключения Центров событий упаковываются в AmqpException. Эти исключения часто имеют базовый код ошибки AMQP, указывающий, следует ли повторить попытку устранения ошибки. Для ошибок, которые допускается повторять (то есть amqp:connection:forced или amqp:link:detach-forced), клиентские библиотеки пытаются исправить эти ошибки на основе параметров повторных попыток, указанных при инициализации клиента. Чтобы настроить параметры повторных попыток, следуйте примеру отправки событий в определенный раздел. Если ошибка не повторна, возникает некоторая проблема конфигурации, которую необходимо устранить.

Рекомендуемый способ решения конкретного исключения, которая представляет собой AMQP-исключение, заключается в следовании рекомендациям по исключениям обмена сообщениями в центрах событий.

Поиск релевантных сведений в сообщениях об исключениях

AmqpException содержит следующие три поля, описывающие ошибку:

  • getErrorCondition: базовая ошибка AMQP. Описание ошибок см. в документации по AmqpErrorCondition Enum или спецификации OASIS AMQP 1.0.
  • isTransient: значение, указывающее, возможно ли снова попытаться выполнить ту же операцию. Клиенты ПАКЕТА SDK применяют политику повторных попыток при временной ошибке.
  • getErrorContext: содержит следующие сведения о том, где возникла ошибка AMQP:
    • LinkErrorContext: ошибки, возникающие в ссылке отправки или получения.
    • SessionErrorContext: ошибки, возникающие в сеансе.
    • AmqpErrorContext: ошибки, возникающие в соединении или общая ошибка протокола AMQP.

Часто встречающиеся исключения

amqp:connection:принудительное и amqp:link:detach-принудительное

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

Проблемы с разрешениями

AmqpException с AmqpErrorConditionamqp:unauthorized-access означает, что предоставленные учетные данные не позволяют выполнять действие (получение или отправку) с центрами событий. Чтобы устранить эту проблему, попробуйте выполнить следующие задачи:

Другие возможные решения см. в разделе Устранение неполадок с проверкой подлинности и авторизацией в центрах событий.

Проблемы с подключением

Время ожидания при подключении к службе

Чтобы устранить проблемы со временем ожидания, попробуйте выполнить следующие задачи:

Сбои установления соединения TLS/SSL

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

Ошибки перегрузки сокета

Приложениям следует рассматривать использование клиента Центров событий как единственного объекта, создавая и используя один экземпляр на протяжении всего времени работы приложения. Эта рекомендация важна, так как каждый тип клиента управляет его подключением. При создании нового клиента Центров событий это приводит к созданию нового подключения AMQP, которое использует сокет. Кроме того, важно, чтобы клиенты наследуются от java.io.Closeable, поэтому ваше приложение отвечает за вызов close() после завершения работы с клиентом.

Чтобы использовать одно и то же подключение AMQP при создании нескольких клиентов, можно использовать флаг EventHubClientBuilder.shareConnection(), сохранить ссылку на этот EventHubClientBuilderи создать новых клиентов с помощью того же билдера.

Подключитесь, используя строку подключения IoT.

Так как для преобразования строки подключения требуется запрос к службе Центра Интернета вещей, клиентская библиотека Центров событий не может использовать ее напрямую. В примере IoTConnectionString.java описывается, как преобразовать строку подключения Интернета вещей для использования с Центрами событий.

Дополнительные сведения см. в следующих статьях:

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

Устаревшие клиенты Центров событий позволили клиентам добавлять компоненты в строку подключения, полученную на портале Azure. Устаревшие клиенты находятся в пакетах com.microsoft.azure:azure-eventhubs и com.microsoft.azure:azure-eventhubs-eph. Текущее поколение поддерживает строки подключения только в форме, опубликованной порталом Azure.

Добавьте "TransportType=AmqpWebSockets"

Сведения об использовании веб-сокетов см. в примере PublishEventsWithSocketsAndProxy.java.

Добавьте "Authentication=Managed Identity"

Сведения о проверке подлинности с использованием управляемой идентичности см. в примере PublishEventsWithAzureIdentity.java.

Дополнительные сведения о библиотеке Azure.Identity см. в блоге Authentication и Azure SDK.

Включение и настройка ведения журнала

Пакет SDK Azure для Java предлагает согласованную историю ведения журнала, чтобы помочь в устранении ошибок приложений и ускорить их разрешение. Журналы позволяют отследить поток приложения, прежде чем оно достигнет конечного состояния, чтобы помочь найти корневую проблему. Рекомендации по ведению журнала см. в разделе Настройка ведения журнала в Azure SDK для Java и устранение неполадок: обзор.

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

Настройка Log4J 2

Чтобы настроить Log4J 2, выполните следующие действия.

  1. Добавьте зависимости в pom.xml с помощью примеров ведения журнала pom.xmlв разделе "Зависимости, необходимые для Log4j2".
  2. Добавьте log4j2.xml в папку src/main/resources.

Настройка обратного входа

Чтобы настроить обратный вход, выполните следующие действия.

  1. Добавьте зависимости в pom.xml, используя их из примера журнала pom.xml, в разделе "Зависимости, необходимые для обратного входа".
  2. Добавьте logback.xml в папку src/main/resources.

Включение ведения журнала транспорта AMQP

Если включение журналирования на стороне клиента недостаточно для диагностики ваших проблем, вы можете включить журналирование в файл на уровне базовой библиотеки AMQP, Qpid Proton-J. Proton-J Qpid использует java.util.logging. Вы можете включить ведение журнала, создав файл конфигурации с содержимым, показанным в следующем разделе. Или задайте proton.trace.level=ALL и какие параметры конфигурации требуется для реализации java.util.logging.Handler. Сведения о классах реализации и их параметрах см. в разделе пакета java.util.logging документации по SDK для Java 8.

Чтобы отслеживать кадры транспорта AMQP, установите переменную среды с именем PN_TRACE_FRM=1.

Пример файла logging.properties

Следующий файл конфигурации регистрирует выходные данные уровня TRACE из Proton-J в файл proton-trace.log:

handlers=java.util.logging.FileHandler
.level=OFF
proton.trace.level=ALL
java.util.logging.FileHandler.level=ALL
java.util.logging.FileHandler.pattern=proton-trace.log
java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=[%1$tF %1$tr] %3$s %4$s: %5$s %n

Сокращение ведения журнала

Один из способов уменьшения логирования — изменить уровень детализации. Другой способ — добавить фильтры, которые исключают журналы из пакетов имен средств ведения журнала, таких как com.azure.messaging.eventhubs или com.azure.core.amqp. Примеры см. в XML-файлах в разделах Настройка Log4J 2 и Настройка Logback.

При сообщении о ошибке лог-сообщения из классов в следующих пакетах представляют интерес:

  • com.azure.core.amqp.implementation
  • com.azure.core.amqp.implementation.handler
    • Исключением является то, что можно игнорировать сообщение onDelivery в ReceiveLinkHandler.
  • com.azure.messaging.eventhubs.implementation

Дальнейшие действия

Если рекомендации по устранению неполадок в этой статье не помогают устранить проблемы при использовании клиентских библиотек пакета SDK Azure для Java, рекомендуется файл проблемы в репозитория Azure SDK для Java GitHub.