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


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

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

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

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

Все исключения Центров событий упаковываются в 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 Подключение ionString.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 проверка для проверки подлинности и записи блога azure SDK.

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

Пакет SDK Azure для Java предлагает согласованную историю ведения журнала, чтобы помочь в устранении ошибок приложений и ускорить их разрешение. Журналы вызвали запись потока приложения, прежде чем достичь состояния терминала, чтобы помочь найти корневую проблему. Инструкции по ведению журнала см. в разделе "Настройка ведения журнала" в пакете SDK Azure для 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. Используется java.util.loggingQpid Proton-J. Вы можете включить ведение журнала, создав файл конфигурации с содержимым, показанным в следующем разделе. Или задайте 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 " и "Настройка обратной передачи журнала".

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

  • 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.