Ř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:
- 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
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:
- 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.
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:
- 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 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 EventHubClientBuilder
a 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:
- Ří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 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:
- 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".
- 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 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 vReceiveLinkHandler
ignorovat .
- Výjimkou je, že zprávu
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.