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

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:

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

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:

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:

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:

  1. 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“.
  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 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.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 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.