Megosztás a következőn keresztül:


Az Azure Event Hubs hibaelhárítása

Ez a cikk a hibavizsgálati technikákat, az Event Hubs-kódtár hitelesítő adatainak típusaival kapcsolatos gyakori hibákat, valamint a hibák elhárításának lépéseit ismerteti. Az Event Hubs-használati esettől függetlenül alkalmazandó általános hibaelhárítási technikák és útmutatók mellett az alábbi cikkek az Event Hubs-kódtár egyes funkcióit is ismertetik:

A cikk további része az Event Hubs-kódtár összes felhasználójára vonatkozó általános hibaelhárítási technikákat és útmutatást ismerteti.

Event Hubs-kivételek kezelése

Minden Event Hubs-kivételt egy AmqpException-ba csomagolnak be. Ezek a kivételek gyakran rendelkeznek egy mögöttes AMQP hibakóddal, amely meghatározza, hogy újra kell-e próbálkozni egy hibát. Újrapróbálkozási hibák (azaz amqp:connection:forced vagy amqp:link:detach-forced) esetén az ügyfélkódtárak az ügyfél példányosításakor megadott újrapróbálkozási beállítások alapján próbálják helyreállítani ezeket a hibákat. Az újrapróbálkozás beállításainak konfigurálásához kövesse a mintát, eseményeket tegyen közzé adott partíciós. Ha a hiba nem helyreállítható, van egy konfigurációs probléma, amelyet meg kell oldani.

Az AMQP-kivétel által képviselt konkrét kivétel megoldásának ajánlott módja az Event Hubs üzenetkezelési kivételek útmutatásának követése.

Releváns információk keresése a kivételüzenetekben

Egy AmqpException a következő három mezőt tartalmazza, amelyek a hibát írják le:

  • getErrorCondition: Az alapul szolgáló AMQP hiba. A hibák leírását lásd az AmqpErrorCondition Enum dokumentációjában vagy a OASIS AMQP 1.0 specifikáció-ban.
  • isTransient: Egy érték, amely jelzi, hogy lehetséges-e ugyanazt a műveletet végrehajtani. Az SDK-ügyfelek akkor alkalmazzák az újrapróbálkozási szabályzatot, ha a hiba átmeneti.
  • getErrorContext: Az AMQP-hiba forrásának helyéről a következő információkat tartalmazza:

Gyakran előforduló kivételek

amqp:connection:forced and amqp:link:detach-forced

Ha az Event Hubs-kapcsolat tétlen, a szolgáltatás egy idő után leválasztja az ügyfelet. Ez a probléma nem probléma, mert az ügyfelek újra létesítenek kapcsolatot egy szolgáltatásművelet kérésekor. További információ: AMQP-hibák az Azure Service Bus-ban.

Engedélyekkel kapcsolatos problémák

A AmqpExceptionAmqpErrorConditionamqp:unauthorized-access azt jelenti, hogy a megadott hitelesítő adatok nem teszik lehetővé a művelet végrehajtását (fogadását vagy küldését) az Event Hubsban. A probléma megoldásához próbálkozzon a következő feladatokkal:

További lehetséges megoldásokért tekintse meg Az Event Hubshitelesítési és engedélyezési problémáinak elhárítása.

Csatlakozási problémák

Időtúllépés a szolgáltatáshoz való csatlakozáskor

Az időtúllépési problémák megoldásához próbálkozzon a következő feladatokkal:

TLS/SSL kézfogási hibák

Ez a hiba akkor fordulhat elő, ha elfogó proxyt használ. Ahhoz, hogy ellenőrizze, javasoljuk, hogy a tárhelyen teszteljen a proxy letiltásával.

Socket-kimerülési hibák

Az alkalmazásoknak inkább egyetlen példányként kell kezelniük az Event Hubs-ügyfeleket, és egyetlen példányt kell létrehozniuk és használniuk az alkalmazásuk élettartama során. Ez a javaslat azért fontos, mert minden ügyféltípus kezeli a kapcsolatot. Amikor új Event Hubs-klienst hoz létre, az egy új AMQP-kapcsolatot eredményez, amely socketet használ. Emellett elengedhetetlen, hogy az ügyfelek örököljék a java.io.Closeabletulajdonságait, ezért az alkalmazásnak kell hívnia a close()-et, amikor befejezte az ügyfél használatát.

Ha ugyanazt az AMQP-kapcsolatot szeretné használni több ügyfél létrehozásakor, használhatja a EventHubClientBuilder.shareConnection() jelzőt, hivatkozhat azon EventHubClientBuilder-re és létrehozhat új ügyfeleket ugyanabból az építőpéldányból.

IoT kapcsolati karakterlánc használatával történő csatlakozás

Mivel a kapcsolati sztring fordításához le kell kérdezni az IoT Hub szolgáltatást, az Event Hubs klienskönyvtár nem használhatja közvetlenül. A IoTConnectionString.java minta bemutatja, hogyan lehet az IoT Hub segítségével egy IoT-kapcsolati sztringet úgy lekérdezni, hogy az kompatibilis legyen az Event Hubs-szal.

További információkért lásd a következő cikkeket:

Nem lehet összetevőket hozzáadni a kapcsolati sztringhez

A régi Event Hubs kliensek lehetővé tették a felhasználóknak, hogy elemeket adjanak hozzá a kapcsolati sztringhez, amelyet az Azure portálról szereztek meg. Az örökölt ügyfelek com.microsoft.azure:azure-eventhubs és com.microsoft.azure:azure-eventhubs-ephcsomagban találhatók. Az aktuális generáció csak az Azure Portal által közzétett formában támogatja a kapcsolati sztringeket.

"TransportType=AmqpWebSockets" hozzáadása

A webes socketek használatához tekintse meg a PublishEventsWithSocketsAndProxy.java mintát.

Adja hozzá az "Authentication=Managed Identity" kifejezést

A felügyelt identitással történő hitelesítéshez tekintse meg a PublishEventsWithAzureIdentity.java példát ().

A Azure.Identity-kódtárról további információt a -hitelesítés és az Azure SDK blogbejegyzésben talál.

Naplózás engedélyezése és konfigurálása

Az Azure SDK for Java konzisztens naplózási történetet kínál az alkalmazáshibák elhárításához és a megoldás felgyorsításához. Az előállított naplók rögzítik az alkalmazás folyamatát, mielőtt elérnék a terminálállapotot, hogy segítsenek megtalálni a gyökérproblémát. A naplózással kapcsolatos útmutatásért lásd: Naplózás konfigurálása a Java- Azure SDK-ban és Hibaelhárítási áttekintés.

A naplózás engedélyezése mellett a naplószint VERBOSE vagy DEBUG beállításával betekintést nyerhet a tár állapotába. Az alábbi szakaszok a log4j2 és logback minta konfigurációkat mutatják be, amelyek csökkentik a részletes naplózás engedélyezésekor megjelenő túlzott üzeneteket.

A Log4J 2 konfigurálása

A Log4J 2 konfigurálásához kövesse az alábbi lépéseket:

  1. Adja hozzá a függőségeket a pom.xml fájlba a naplózási minta pom.xml"A Log4j2-hez szükséges függőségek" szakaszában található elemek használatával.
  2. Adj hozzá log4j2.xml a src/main/resources mappához.

A naplózás konfigurálása

A bejelentkezés konfigurálásához kövesse az alábbi lépéseket:

  1. Adja hozzá a függőségeket a pom.xml-hez a naplózási minta pom.xml-ban lévő "A logbackhez szükséges függőségek" szakaszban találhatókat használva.
  2. Add logback.xml a src/main/resources mappához.

Az AMQP-naplózás engedélyezése

Ha az ügyfélnaplózás engedélyezése nem elég a problémák diagnosztizálásához, engedélyezheti a naplózást egy fájlba a mögöttes AMQP-kódtárban, Qpid Proton-J. A Qpid Proton-J java.util.logginghasznál. A naplózás engedélyezéséhez hozzon létre egy konfigurációs fájlt a következő szakaszban látható tartalommal. Vagy adja meg proton.trace.level=ALL és a java.util.logging.Handler implementációhoz használni kívánt konfigurációs beállításokat. A megvalósítási osztályokról és azok lehetőségeiről a Java 8 SDK dokumentációjában Csomag java.util.logging című témakörben olvashat.

Az AMQP átviteli kereteinek nyomon követéséhez állítsa be a PN_TRACE_FRM=1 környezeti változót.

Minta "logging.properties" fájl

A következő konfigurációs fájl a Proton-J-n naplózza a TRACE szintű kimenetet a proton-trace.log fájlba.

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

Naplózás csökkentése

A naplózás csökkentésének egyik módja a részletesség módosítása. Egy másik módszer, ha olyan szűrőket ad hozzá, amelyek kizárják a naplókat a naplózó névcímkék csomagjaiból, mint például com.azure.messaging.eventhubs vagy com.azure.core.amqp. Példaképpen lásd az XML-fájlokat a Log4J 2 konfigurálása és a logback konfigurálása szakaszokban.

Ha hibát küld, a következő csomagok osztályaiból érkező naplóüzenetek érdekesek:

  • com.azure.core.amqp.implementation
  • com.azure.core.amqp.implementation.handler
    • Az a kivétel, hogy a onDelivery üzenetet a ReceiveLinkHandler-ben figyelmen kívül hagyhatja.
  • com.azure.messaging.eventhubs.implementation

Következő lépések

Ha a cikkben található hibaelhárítási útmutató nem segít megoldani az Azure SDK for Java ügyfélkönyvtárak használatakor felmerülő problémákat, javasoljuk, hogy hibajegyet nyújtson be a Java-hoz készült Azure SDK GitHub-adattárban.