Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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:
- Azure Event Hubs-producer hibaelhárítása
- Azure Event Hubs eseményfeldolgozó hibaelhárítása
- Az Azure Event Hubs teljesítményével kapcsolatos hibaelhárítása
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:
- LinkErrorContext: A küldési vagy fogadási hivatkozásban előforduló hibák.
- SessionErrorContext: A munkamenetben előforduló hibák.
- AmqpErrorContext: A kapcsolatban előforduló hibák vagy általános AMQP-hiba.
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:
- Ellenőrizze, hogy a megfelelő kapcsolati sztringgel rendelkezik-e. További információ: Event Hubs kapcsolati karakterlánc lekérése.
- Győződjön meg arról, hogy a shared access signature (SAS) token megfelelően van létrehozva. További információ: Event Hubs-erőforrásokhoz való hozzáférés engedélyezése közös hozzáférésű jogosultságkódokkal.
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:
- Ellenőrizze, hogy az ügyfél létrehozásakor megadott kapcsolati sztring vagy teljes tartománynév helyes-e. További információ: Event Hubs kapcsolati karakterlánc lekérése.
- Ellenőrizze a tűzfal- és portengedélyeket az üzemeltetési környezetben, és ellenőrizze, hogy az 5671-es és az 5762-es AMQP-port nyitva van-e.
- Győződjön meg arról, hogy a végpont engedélyezve van a tűzfalon keresztül.
- Próbáljon meg websocketeket használni, amelyek a 443-as porton csatlakoznak. További információ: PublishEventsWithWebSocketsAndProxy.java minta.
- Ellenőrizze, hogy a hálózat blokkol-e bizonyos IP-címeket. További információ: Milyen IP-címeket kell engedélyezni?
- Ha van ilyen, ellenőrizze a proxy konfigurációját. További információ: PublishEventsWithWebSocketsAndProxy.java minta.
- A hálózati kapcsolatok hibaelhárításával kapcsolatos további információkért lásd: Kapcsolati problémák elhárítása – Azure Event Hubs.
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:
- Az IoT Hubhoz való hozzáférés szabályozása közös hozzáférésű jogosultságkódokkal
- Eszközről felhőbe irányuló üzenetek olvasása a beépített végpontról
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:
- 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.
- 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:
- 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.
- 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.implementationcom.azure.core.amqp.implementation.handler- Az a kivétel, hogy a
onDeliveryüzenetet aReceiveLinkHandler-ben figyelmen kívül hagyhatja.
- Az a kivétel, hogy a
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.