Sdílet prostřednictvím


Řešení potíží se službou Azure Event Hubs

Tento článek se zabývá technikami šetření selhání, běžnými chybami typů přihlašovacích údajů v knihovně služby Event Hubs a kroky pro zmírnění těchto chyb. 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:

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:

Běžně dochází k výjimkám

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í. Tento problém není problém, protože klienti při vyžádání operace služby znovu navazují připojení. Další informace najdete v tématu chyby AMQP ve službě Azure Service Bus.

Problémy s oprávněními

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:

Další možná řešení najdete v tématu Řešení potíží s ověřováním a autorizací ve službě Event Hubs.

Problémy s připojením

Č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:

Selhání metody handshake protokolu TLS/SSL

K této chybě může dojít při použití proxy serveru pro zachytávání. K ověření doporučujeme otestovat ve vašem hostitelském prostředí se zakázaným proxy serverem.

Chyby vyčerpání soketů

Aplikace by měly preferovat zacházení s klienty služby Event Hubs jako s jedním objektem, vytvářením a používáním jedné instance po celou dobu životnosti 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, výsledkem bude 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.

Pokud chcete použít stejné připojení AMQP při vytváření více klientů, můžete použít příznak EventHubClientBuilder.shareConnection(), uchovávat odkaz na tento EventHubClientBuildera vytvářet nové klienty ze stejné instance tvůrce.

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:

Do připojovacího řetězce nejde přidat komponenty

Starší klienti služby Event Hubs povolili zákazníkům přidávat komponenty do připojovacího řetězce načteného z webu Azure Portal. 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 našem příspěvku na blogu o ověřování a blogovém příspěvku Azure SDK.

Povolení a konfigurace protokolování

Sada Azure SDK pro Javu nabízí konzistentní scénář protokolování, který pomáhá řešit chyby aplikací a urychlit jejich řešení. Vytvořené protokoly zachycují tok aplikace před dosažením jejího konečného stavu, aby pomohly najít kořenový problém. 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:

  1. Přidejte do pom.xml závislosti s využitím těch z ukázky protokolování pom.xml, jak je uvedeno v části "Závislosti požadované pro Log4j2".
  2. 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:

  1. Přidejte závislosti do pom.xml pomocí těch z ukázky protokolování pom.xmlv části „Závislosti potřebné pro logback“.
  2. 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 protokoluje výstup na úrovni TRASOVÁNÍ 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.implementation
  • com.azure.core.amqp.implementation.handler
    • Výjimkou je, že zprávu onDelivery můžete v ReceiveLinkHandlerignorovat .
  • com.azure.messaging.eventhubs.implementation

Další kroky

Pokud pokyny pro řešení potíží v tomto článku nepomohly vyřešit problémy při používání klientských knihoven Azure SDK pro Java, doporučujeme nahlásit problém v úložišti Azure SDK pro Java na GitHubu.