Устранение неполадок Центров событий Azure
В этой статье рассматриваются методы исследования сбоев, распространенные ошибки типов учетных данных в библиотеке Центров событий и действия по устранению этих ошибок. Помимо общих методов устранения неполадок и рекомендаций, которые применяются независимо от варианта использования Центров событий, в следующих статьях рассматриваются конкретные функции библиотеки Центров событий:
- Устранение неполадок продюсера Центров событий Azure
- Устранение неполадок обработчика событий Azure Event Hubs
- устранение неполадок с производительностью Центров событий 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
означает, что предоставленные учетные данные не позволяют выполнять действие (получение или отправку) с центрами событий. Чтобы устранить эту проблему, попробуйте выполнить следующие задачи:
- Дважды убедитесь, что у вас есть правильная строка подключения. Дополнительные сведения см. в разделе Получение строки подключения центров событий.
- Убедитесь, что маркер общего доступа (SAS) создан правильно. Дополнительные сведения см. в статье Авторизация доступа к ресурсам Центров событий с помощью подписанных URL-адресов.
Другие возможные решения см. в разделе Устранение неполадок с проверкой подлинности и авторизацией в центрах событий.
Проблемы с подключением
Время ожидания при подключении к службе
Чтобы устранить проблемы со временем ожидания, попробуйте выполнить следующие задачи:
- Убедитесь, что строка подключения или полное доменное имя, указанные при создании клиента, корректны. Дополнительные сведения см. в разделе Получение строки подключения центров событий.
- Проверьте разрешения брандмауэра и порта в среде размещения и убедитесь, что открыты порты AMQP 5671 и 5762.
- Убедитесь, что конечная точка разрешена через брандмауэр.
- Попробуйте использовать WebSockets, который подключается к порту 443. Дополнительные сведения см. в примере PublishEventsWithWebSocketsAndProxy.java.
- Проверьте, блокирует ли сеть определенные IP-адреса. Дополнительные сведения см. в разделе Какие IP-адреса нужно разрешить?
- Если применимо, проверьте конфигурацию прокси-сервера. Дополнительные сведения см. в примере PublishEventsWithWebSocketsAndProxy.java.
- Дополнительные сведения об устранении неполадок с сетевым подключением см. в статье Устранение неполадок с подключением в Центрах событий Azure.
Сбои установления соединения 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, выполните следующие действия.
- Добавьте зависимости в pom.xml с помощью примеров ведения журнала pom.xmlв разделе "Зависимости, необходимые для Log4j2".
- Добавьте log4j2.xml в папку src/main/resources.
Настройка обратного входа
Чтобы настроить обратный вход, выполните следующие действия.
- Добавьте зависимости в pom.xml, используя их из примера журнала pom.xml, в разделе "Зависимости, необходимые для обратного входа".
- Добавьте 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.