Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek popisuje, jak řešit Azure Event Hubs selhání, včetně běžných chyb typů přihlašovacích údajů v knihovně služby Event Hubs a kroků pro jejich zmírnění. Kromě obecných technik a pokynů pro řešení potíží, které platí bez ohledu na případ použití služby Event Hubs, se následující články týkají konkrétních funkcí knihovny Event Hubs:
- Odstraňování potíží producenta služby Azure Event Hubs
- řešení potíží s procesorem událostí služby Azure Event Hubs
- řešení potíží s výkonem služby Azure Event Hubs
Zbývající část tohoto článku popisuje obecné techniky a pokyny pro řešení potíží, které platí pro všechny uživatele knihovny služby Event Hubs.
Zpracování výjimek služby Event Hubs
Všechny výjimky služby Event Hubs jsou zabaleny do AmqpException. Tyto výjimky často obsahují základní kód chyby AMQP, který určuje, jestli se má chyba opakovat. U opakovaných chyb (tj. amqp:connection:forced nebo amqp:link:detach-forced) se klientské knihovny pokusí z těchto chyb obnovit na základě možností opakování zadaných při vytváření instance klienta. Pokud chcete konfigurovat možnosti opakování, postupujte podle vzoru pro publikování událostí do konkrétního oddílu. Pokud není chyba možné ji znovu vyzkoušet, je potřeba vyřešit nějaký problém s konfigurací.
Doporučeným způsobem, jak vyřešit konkrétní výjimku, kterou představuje výjimka AMQP, je následujte pokyny výjimek zasílání zpráv služby Event Hubs.
Vyhledání relevantních informací ve zprávách o výjimce
AmqpException obsahuje následující tři pole, která popisují chybu:
- getErrorCondition: Základní příčina chyby AMQP. Popis chyb naleznete v dokumentaci AmqpErrorCondition Enum nebo OASIS AMQP 1.0 specifikace.
- isTransient: Hodnota označující, zda je možné provést stejnou operaci. Klienti sady SDK použijí zásadu opakování, pokud je chyba přechodná.
-
getErrorContext: Obsahuje následující informace o původu chyby AMQP:
- LinkErrorContext: Chyby, ke kterým dochází v odkazu pro odesílání nebo přijímání.
- SessionErrorContext: Chyby, ke kterým dochází v relaci.
- AmqpErrorContext: Chyby, ke kterým dochází v připojení nebo obecné chybě AMQP.
Běžně dochází k výjimkám služby Event Hubs
amqp:connection:forced a amqp:link:detach-forced
Když je připojení ke službě Event Hubs nečinné, služba po nějaké době klienta odpojí. Toto chování není problém, protože klienti znovu navazují připojení při vyžádání operace služby. Další informace najdete v tématu chyby AMQP ve službě Azure Service Bus.
Řešení problémů s oprávněními služby Event Hubs
AmqpException s AmqpErrorConditionamqp:unauthorized-access znamená, že zadané přihlašovací údaje neumožňují provedení akce (přijímání nebo odesílání) ve službě Event Hubs. Pokud chcete tento problém vyřešit, vyzkoušejte následující úlohy:
- Pečlivě zkontrolujte, že máte správný připojovací řetězec. Další informace najdete v tématu Získání připojovacího řetězce služby Event Hubs.
- Ujistěte se, že je token sdíleného přístupového podpisu (SAS) vygenerovaný správně. Další informace najdete v tématu Autorizace přístupu k prostředkům služby Event Hubs pomocí sdílených přístupových podpisů.
Další možná řešení najdete v tématu Řešení potíží s ověřováním a autorizací ve službě Event Hubs.
Řešení problémů s připojením ke službě Event Hubs
Časový limit při připojování ke službě
Pokud chcete vyřešit problémy s vypršením časového limitu, vyzkoušejte následující úlohy:
- Ověřte správnost připojovacího řetězce nebo plně kvalifikovaného názvu domény zadaného při vytváření klienta. Další informace najdete v tématu Získání připojovacího řetězce služby Event Hubs.
- Zkontrolujte oprávnění brány firewall a portu ve vašem hostitelském prostředí a ověřte, že jsou otevřené porty AMQP 5671 a 5762.
- Ujistěte se, že je koncový bod povolen firewallem.
- Zkuste použít webSockets, který se připojuje na portu 443. Další informace najdete v ukázce PublishEventsWithWebSocketsAndProxy.java.
- Zkontrolujte, jestli vaše síť neblokuje konkrétní IP adresy. Další informace najdete v tématu Jaké IP adresy je potřeba povolit?
- Pokud je to možné, zkontrolujte konfiguraci proxy serveru. Další informace najdete v ukázce PublishEventsWithWebSocketsAndProxy.java.
- Další informace o řešení potíží se síťovým připojením najdete v tématu Řešení potíží s připojením – Azure Event Hubs.
Selhání metody handshake protokolu TLS/SSL
K této chybě může dojít, pokud používáte zachytávací proxy server. Pokud to chcete ověřit, otestujte ho v hostitelském prostředí se zakázaným proxy serverem.
Chyby vyčerpání soketů
Klienty Event Hubs používejte jako singleton. Vytvořte a používejte jednu instanci po celou dobu životnosti vaší aplikace. Toto doporučení je důležité, protože každý typ klienta spravuje své připojení. Když vytvoříte nového klienta služby Event Hubs, vytvoříte nové připojení AMQP, které používá soket. Kromě toho je nezbytné, aby klienti dědili z java.io.Closeable, proto vaše aplikace zodpovídá za volání close() po dokončení práce s klientem.
Chcete-li při vytváření více klientů použít stejné připojení AMQP, použijte příznak EventHubClientBuilder.shareConnection(), ponechte si odkaz na tento EventHubClientBuilder a vytvářejte nové klienty pomocí stejné instance builderu.
Připojte se pomocí řetězce připojení IoT
Protože překlad připojovacího řetězce vyžaduje dotazování služby IoT Hub, klientská knihovna Event Hubs ji nemůže použít přímo. Ukázka IoTConnectionString.java popisuje, jak dotazovat službu IoT Hub k přeložení připojovacího řetězce IoT na ten, který lze použít se službou Event Hubs.
Další informace najdete v následujících článcích:
- Řízení přístupu ke službě IoT Hub pomocí sdílených přístupových podpisů
- Čtení zpráv z zařízení do cloudu z integrovaného koncového bodu
Do připojovacího řetězce nejde přidat komponenty
Starší klienti služby Event Hubs vám umožnili přidávat komponenty do připojovací řetězec načtených z portálu Azure. Starší klienti jsou v balíčcích com.microsoft.azure:azure-eventhubs a com.microsoft.azure:azure-eventhubs-eph. Aktuální generace podporuje připojovací řetězce pouze ve formuláři publikovaném na webu Azure Portal.
Přidat "TransportType=AmqpWebSockets"
Pokud chcete použít webové sokety, podívejte se na ukázku PublishEventsWithSocketsAndProxy.java.
Přidat "Authentication=Managed Identity"
Pokud se chcete ověřit pomocí spravované identity, podívejte se na ukázkovou PublishEventsWithAzureIdentity.java.
Další informace o knihovně Azure.Identity najdete v blogovém příspěvku o ověřování a Azure SDK.
Povolení a konfigurace protokolování pro službu Event Hubs
Sada Azure SDK pro Javu nabízí konzistentní scénář protokolování, který pomáhá řešit chyby aplikací a urychlit jejich řešení. Logy, které vytvoříte, zachycují průběh aplikace před dosažením koncového stavu a pomáhají určit hlavní příčinu problému. Pokyny k protokolování najdete v tématu Konfigurace protokolování v sadě Azure SDK pro javu a Přehled řešení potíží.
Kromě povolení protokolování poskytuje nastavení úrovně protokolu na VERBOSE nebo DEBUG přehled o stavu knihovny. Následující části ukazují ukázkové konfigurace log4j2 a logback, které snižují nadměrné množství zpráv, když je povolené podrobné protokolování.
Konfigurace Log4J 2
Ke konfiguraci Log4J 2 použijte následující kroky:
- Přidejte do souboru pom.xml závislosti pomocí těch z ukázkového souboru pom.xml pro protokolování v části „Dependencies required for Log4j2“.
- Do složky
src/main/resources přidejte log4j2.xml .
Konfigurace zpětného protokolování
Ke konfiguraci zpětného přihlašování použijte následující postup:
- Přidejte závislosti do pom.xml pomocí těch z ukázky protokolování pom.xmlv části „Závislosti potřebné pro logback“.
- Do složky
src/main/resources přidejte logback.xml .
Povolení protokolování přenosu AMQP
Pokud povolení protokolování klienta nestačí k diagnostice problémů, můžete povolit protokolování do souboru v podkladové knihovně AMQP Qpid Proton-J. Qpid Proton-J používá java.util.logging. Protokolování můžete povolit vytvořením konfiguračního souboru s obsahem zobrazeným v další části. Nebo nastavte proton.trace.level=ALL a možnosti konfigurace, které chcete pro implementaci java.util.logging.Handler. Třídy implementace a jejich možnosti najdete v tématu Package java.util.logging v dokumentaci k sadě Java 8 SDK.
Pokud chcete trasovat přenosové rámce AMQP, nastavte proměnnou prostředí PN_TRACE_FRM=1.
Ukázkový soubor logging.properties
Následující konfigurační soubor zapisuje výstup na úrovni TRACE z Proton-J do souboru 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
Omezení protokolování
Jedním ze způsobů, jak snížit protokolování, je změnit úroveň podrobností. Dalším způsobem je přidat filtry, které vyloučí protokoly z balíčků názvů protokolovacího nástroje, jako jsou com.azure.messaging.eventhubs nebo com.azure.core.amqp. Příklady najdete v XML souborech v oddílech Konfigurace Log4J 2 a Konfigurace logback.
Při odeslání chyby mohou být logové zprávy z tříd v následujících balíčcích užitečné:
com.azure.core.amqp.implementationcom.azure.core.amqp.implementation.handler- Výjimkou je, že zprávu
onDeliverymůžete vReceiveLinkHandlerignorovat .
- Výjimkou je, že zprávu
com.azure.messaging.eventhubs.implementation
Další kroky
Pokud pokyny k řešení potíží v tomto článku nepomáhají vyřešit problémy při použití Azure SDK pro Java klientských knihoven, založte problém v Azure SDK pro úložiště Java GitHub.