Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel werden Techniken zur Fehleruntersuchung, häufig auftretende Fehler im Zusammenhang mit den Typen der Anmeldeinformationen in der Event Hubs-Bibliothek sowie Schritte zur Behebung dieser Fehler behandelt. Zusätzlich zu den allgemeinen Problembehandlungstechniken und Anleitungen, die unabhängig vom Anwendungsfall für Event Hubs gelten, behandeln die folgenden Artikel bestimmte Features der Event Hubs-Bibliothek:
- Behandeln von Problemen mit dem Azure Event Hubs-Producer
- Behandeln von Problemen mit dem Azure Event Hubs-Ereignisprozessor
- Behandeln von Problemen im Zusammenhang mit der Azure Event Hubs-Leistung
Im restlichen Teil dieses Artikels werden allgemeine Problembehandlungstechniken und Anleitungen behandelt, die für alle Benutzer der Event Hubs-Bibliothek gelten.
Umgang mit Event Hubs-Ausnahmen
Alle Event Hubs-Ausnahmen werden in eine AmqpException eingebunden. Diese Ausnahmen weisen häufig einen zugrunde liegenden AMQP-Fehlercode auf, der angibt, ob ein Fehler wiederholt werden soll. Bei wiederholbaren Fehlern (d. h. amqp:connection:forced oder amqp:link:detach-forced) versuchen die Clientbibliotheken, diesen Fehler auf Basis der Wiederholungsoptionen zu beheben, die beim Instanziieren des Clients angegeben wurden. Folgen Sie zum Konfigurieren der Wiederholungsoptionen dem Beispiel unter Veröffentlichen von Ereignissen in bestimmten Partitionen. Wenn der Fehler nicht wiederholbar ist, besteht ein Konfigurationsproblem, das behoben werden muss.
Die empfohlene Methode zum Lösen der spezifischen Ausnahme, die die AMQP-Ausnahme darstellt, besteht darin, die Event Hubs Messaging Exceptions Anleitungen zu befolgen.
Suchen relevanter Informationen in Ausnahmemeldungen
Eine AmqpException- enthält die folgenden drei Felder, die den Fehler beschreiben:
- getErrorCondition: Der zugrunde liegende AMQP-Fehler. Eine Beschreibung der Fehler finden Sie in der AmqpErrorCondition Enum-Dokumentation oder der OASIS AMQP 1.0-Spezifikation.
- isTransient: Ein Wert, der angibt, ob es möglich ist, zu versuchen, denselben Vorgang auszuführen. SDK-Clients wenden die Wiederholungsrichtlinie an, wenn der Fehler vorübergehend ist.
- getErrorContext-: Enthält die folgenden Informationen zum Ursprung des AMQP-Fehlers:
- LinkErrorContext: Fehler, die entweder im Sende- oder Empfangslink auftreten.
- SessionErrorContext-: Fehler, die während der Sitzung auftreten.
- AmqpErrorContext: Fehler, die beim Herstellen der Verbindung auftreten, oder ein allgemeiner AMQP-Fehler.
Häufig auftretende Ausnahmen
amqp:connection:forced und amqp:link:detach-forced
Wenn sich die Verbindung mit Event Hubs im Leerlauf befindet, unterbricht der Dienst nach einiger Zeit die Verbindung zum Client. Dies ist kein Problem, weil die Clients die Verbindung wiederherstellen, wenn ein Dienstvorgang angefordert wird. Weitere Informationen finden Sie unter AMQP-Fehler in Azure Service Bus.
Berechtigungsprobleme
Eine AmqpException mit einer AmqpErrorCondition von amqp:unauthorized-access bedeutet, dass die angegebenen Zugangsdaten es nicht erlauben, Aktionen (Empfangen oder Senden) mit Event Hubs durchzuführen. Um dieses Problem zu beheben, probieren Sie die folgenden Aufgaben aus:
- Überprüfen Sie, ob Sie über die richtige Verbindungszeichenfolge verfügen. Weitere Informationen finden Sie unter Rufen Sie eine Event Hubs-Verbindungszeichenfolge ab.
- Stellen Sie sicher, dass Ihr SAS-Token (Shared Access Signature) ordnungsgemäß generiert wird. Weitere Informationen finden Sie unter Autorisieren des Zugriffs auf Event Hubs-Ressourcen mit Shared Access Signatures.
Weitere mögliche Lösungen finden Sie unter Lösen von Authentifizierungs- und Autorisierungsproblemen mit Event Hubs.
Konnektivitätsprobleme
Timeout beim Herstellen einer Verbindung mit dem Dienst
Um Timeoutprobleme zu beheben, gehen Sie wie folgt vor:
- Stellen Sie sicher, dass die angegebene Verbindungszeichenfolge oder der vollqualifizierte Domänenname beim beim Erstellen des Clients korrekt ist. Weitere Informationen finden Sie unter Rufen Sie eine Event Hubs-Verbindungszeichenfolge ab.
- Überprüfen Sie die Firewall- und Portberechtigungen in Ihrer Hostingumgebung, und überprüfen Sie, ob die AMQP-Ports 5671 und 5762 geöffnet sind.
- Stellen Sie sicher, dass der Endpunkt durch die Firewall zugelassen wird.
- Versuchen Sie, WebSockets zu verwenden, die eine Verbindung mit Port 443 herstellt. Weitere Informationen finden Sie im Beispiel PublishEventsWithWebSocketsAndProxy.java.
- Überprüfen Sie, ob Ihr Netzwerk bestimmte IP-Adressen blockiert. Weitere Informationen finden Sie unter Welche IP-Adressen muss ich zulassen?
- Überprüfen Sie ggf. die Proxykonfiguration. Weitere Informationen finden Sie im Beispiel PublishEventsWithWebSocketsAndProxy.java.
- Weitere Informationen zur Problembehandlung bei der Netzwerkkonnektivität finden Sie unter Problembehandlung bei Konnektivitätsproblemen – Azure Event Hubs.
Fehler beim TLS/SSL-Handshake
Dieser Fehler kann auftreten, wenn ein abfangender Proxy verwendet wird. Um dies zu überprüfen, empfehlen wir, Tests in Ihrer Hostingumgebung mit deaktiviertem Proxy durchzuführen.
Fehler bei der Socketauslastung
Anwendungen sollten die Event Hubs-Clients vorzugsweise als Singleton behandeln und während ihrer gesamten Lebensdauer eine einzelne Instanz erstellen und verwenden. Diese Empfehlung ist wichtig, da jeder Clienttyp seine Verbindung verwaltet. Wenn Sie einen neuen Event Hubs-Client erstellen, führt er zu einer neuen AMQP-Verbindung, die einen Socket verwendet. Darüber hinaus ist es wichtig, dass Clients von java.io.Closeable erben, damit Ihre Anwendung close() aufruft, wenn sie einen Client nicht mehr verwendet.
Wenn Sie beim Erstellen mehrerer Clients dieselbe AMQP-Verbindung verwenden möchten, können Sie das Flag EventHubClientBuilder.shareConnection() verwenden, auf diesen EventHubClientBuilder verweisen und neue Clients ausgehend von derselben Builder-Instanz erstellen.
Herstellen einer Verbindung unter Verwendung einer IoT-Verbindungszeichenfolge
Da für die Übersetzung einer Verbindungszeichenfolge eine Abfrage des IoT Hub-Diensts erforderlich ist, kann die Event Hubs-Clientbibliothek sie nicht direkt verwenden. Im IoTConnectionString.java Beispiel wird beschrieben, wie Sie IoT Hub abfragen, um eine IoT-Verbindungszeichenfolge in eine zu übersetzen, die mit Event Hubs verwendet werden kann.
Weitere Informationen finden Sie in den folgenden Artikeln:
- Zugriff auf den IoT-Hub mithilfe von gemeinsamen Zugriffssignaturen steuern
- Lesen von D2C-Nachrichten (Device-to-Cloud) vom integrierten Endpunkt
Der Verbindungszeichenfolge können keine Komponenten hinzugefügt werden
Die veralteten Event Hubs-Clients erlaubten es den Kunden, Komponenten zur Verbindungszeichenfolge hinzuzufügen, die sie aus dem Azure-Portal abgerufen hatten. Die Legacy-Clients befinden sich in den Paketen com.microsoft.azure:azure-eventhubs und com.microsoft.azure:azure-eventhubs-eph. Die aktuelle Generation unterstützt Verbindungszeichenfolgen nur in dem Formular, das vom Azure-Portal veröffentlicht wird.
Hinzufügen von „TransportType=AmqpWebSockets“
Informationen zur Verwendung von Websockets finden Sie im PublishEventsWithSocketsAndProxy.java Beispiel.
Hinzufügen von „Authentication=Managed Identity“
Informationen zur Authentifizierung mit verwalteter Identität finden Sie im Beispiel PublishEventsWithAzureIdentity.java.
Weitere Informationen zur Azure.Identity-Bibliothek finden Sie in unserem Beitrag zur -Authentifizierung und im Blogbeitrag des Azure SDK.
Aktivieren und Konfigurieren der Protokollierung
Azure SDK für Java bietet eine konsistente Logging-Story, um die Fehlersuche bei Anwendungsfehlern zu erleichtern und deren Lösung zu beschleunigen. Die erstellten Protokolle erfassen den Ablauf einer Anwendung, bevor sie den Terminalstatus erreicht, um das Stammproblem zu finden. Richtlinien zur Protokollierung finden Sie unter Konfiguration der Protokollierung im Azure SDK für Java und Übersicht zur Fehlerbehebung.
Zusätzlich zur Aktivierung der Protokollierung bietet das Festlegen der Protokollebene auf VERBOSE oder DEBUG Einblicke in den Zustand der Bibliothek. In den folgenden Abschnitten finden Sie Beispiele für die Konfiguration von log4j2 und logback, um die übermäßigen Meldungen zu reduzieren, wenn die ausführliche Protokollierung aktiviert ist.
Konfigurieren von Log4J 2
Führen Sie die folgenden Schritte aus, um Log4J 2 zu konfigurieren:
- Fügen Sie die Abhängigkeiten in Ihrer pom.xml hinzu, indem Sie die Abhängigkeiten aus der pom.xml des Logging-Beispiels verwenden, und zwar im Abschnitt „Für Log4j2 erforderliche Abhängigkeiten“.
- Fügen Sie log4j2.xml zu Ihrem src/main/resources-Ordner hinzu.
Logback konfigurieren
Führen Sie die folgenden Schritte aus, um Logback zu konfigurieren:
- Fügen Sie die Abhängigkeiten in Ihrer pom.xml hinzu, indem Sie die Abhängigkeiten aus der pom.xml des Logging-Beispiels verwenden, und zwar im Abschnitt „Für Logback erforderliche Abhängigkeiten“.
- Fügen Sie logback.xml zu Ihrem Ordner src/main/resources hinzu.
Aktivierung der AMQP-Transportprotokollierung
Wenn die Aktivierung der Client-Protokollierung nicht ausreicht, um Ihre Probleme zu diagnostizieren, können Sie die Protokollierung in eine Datei in der zugrunde liegenden AMQP-Bibliothek, Qpid Proton-J, aktivieren. Qpid Proton-J verwendet java.util.logging. Sie können die Protokollierung aktivieren, indem Sie eine Konfigurationsdatei mit den im nächsten Abschnitt gezeigten Inhalten erstellen. Oder legen Sie proton.trace.level=ALL und die gewünschten Konfigurationsoptionen für die Implementierung von java.util.logging.Handler fest. Die Implementierungsklassen und deren Optionen finden Sie in der Java 8 SDK-Dokumentation unter Package java.util.logging.
Um die Ablaufverfolgung der AMQP-Transportrahmen durchzuführen, setzen Sie die Umgebungsvariable PN_TRACE_FRM=1.
Beispiel für die Datei „logging.properties“
Die folgende Konfigurationsdatei protokolliert die Ablaufverfolgung auf TRACE-Ebene von Proton-J in der Datei 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
Protokollierung reduzieren
Eine Möglichkeit, die Protokollierung zu verringern, besteht darin, die Ausführlichkeit zu ändern. Eine andere Möglichkeit ist das Hinzufügen von Filtern, die Protokolle von Paketen mit Loggernamen wie com.azure.messaging.eventhubs oder com.azure.core.amqp ausschließen. Beispiele finden Sie in den XML-Dateien in den Abschnitten Konfiguration von Log4J 2 und Konfiguration von logback.
Wenn Sie einen Fehler übermitteln, sind die Protokollmeldungen aus Klassen in den folgenden Paketen interessant:
com.azure.core.amqp.implementationcom.azure.core.amqp.implementation.handler- Die Ausnahme besteht darin, dass Sie die
onDelivery-Meldung inReceiveLinkHandlerignorieren können.
- Die Ausnahme besteht darin, dass Sie die
com.azure.messaging.eventhubs.implementation
Nächste Schritte
Wenn die Richtlinien zur Fehlerbehebung in diesem Artikel nicht helfen, Probleme bei der Verwendung der Azure SDK for Java Client-Bibliotheken zu lösen, empfehlen wir Ihnen, einen Fehler im Azure SDK for Java GitHub Repository zu melden.