Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makale hata araştırma tekniklerini, Event Hubs kitaplığındaki kimlik bilgisi türleri için yaygın hataları ve bu hataları düzeltmeye yönelik azaltma adımlarını kapsar. Event Hubs kullanım örneğinden bağımsız olarak geçerli olan genel sorun giderme tekniklerine ve kılavuzuna ek olarak, aşağıdaki makaleler Event Hubs kitaplığının belirli özelliklerini kapsar:
- Azure Event Hubs üreticisinin sorunları nasıl giderileceği
- Azure Event Hubs olay işlemcisi sorunlarını giderme
- Azure Event Hubs performansı sorunlarını giderme
Bu makalenin geri kalanı, Event Hubs kitaplığının tüm kullanıcıları için geçerli olan genel sorun giderme tekniklerini ve yönergelerini kapsar.
Event Hubs istisnalarını yönetme
Tüm Event Hubs özel durumları bir AmqpExceptioniçinde sarılır. Bu özel durumlar genellikle bir hatanın yeniden denenip denenmeyeceğini belirten temel amqp hata koduna sahiptir. Yeniden denenebilir hatalar için (amqp:connection:forced veya amqp:link:detach-forced), istemci kitaplıkları istemci örneği oluşturulurken belirtilen yeniden deneme seçeneklerine göre bu hatalardan kurtulmaya çalışır. Yeniden deneme seçeneklerini yapılandırmak için örnek olaylarınıbelirli bir bölüme yayınlamayı takip edin. Hata yeniden denenemezse, çözülmesi gereken bir yapılandırma sorunu vardır.
AMQP özel durumunun temsil ettiği özel durumu çözmenin önerilen yolu Event Hubs Mesajlaşma Özel Durumları yönergelerini izlemektir.
Özel durum iletilerinde ilgili bilgileri bulma
AmqpException, hatayı açıklayan aşağıdaki üç alanı içerir:
- getErrorCondition: Temel alınan AMQP hatası. Hataların açıklaması için AmqpErrorCondition Enum belgelerine veya OASIS AMQP 1.0 belirtimlerinebakın.
- isTransient: Aynı işlemi gerçekleştirmeye çalışmanın mümkün olup olmadığını gösteren bir değerdir. SDK istemcileri, hata geçici olduğunda yeniden deneme ilkesini uygular.
- getErrorContext
: AMQP hatasının nereden kaynaklandığı hakkında aşağıdaki bilgileri içerir: - LinkErrorContext: Gönderme veya alma bağlantısında oluşan hatalar.
- SessionErrorContext: Oturumda oluşan hatalar.
- AmqpErrorContext: Bağlantıda oluşan hatalar veya genel amqp hatası.
Sık karşılaşılan özel durumlar
amqp:connection:forced ve amqp:link:detach-forced
Event Hubs bağlantısı boşta olduğunda, hizmet bir süre sonra istemcinin bağlantısını keser. İstemciler bir hizmet işlemi istendiğinde yeniden bağlantı kurduğundan bu sorun sorun değil. Daha fazla bilgi için bkz. Azure Service BusAMQP hataları.
İzin sorunları
AmqpException, bir içeren amqp:unauthorized-access, sağlanan kimlik bilgilerinin Event Hubs ile herhangi bir eylemi (alma veya gönderme) gerçekleştirmeye izin vermediğini gösterir. Bu sorunu çözmek için aşağıdaki görevleri deneyin:
- Doğru bağlantı dizesine sahip olup olmadığınızı bir kez daha denetleyin. Daha fazla bilgi için bkz. Event Hubs bağlantı dizesi alma.
- Paylaşılan erişim imzası (SAS) belirtecinizin doğru oluşturulduğundan emin olun. Daha fazla bilgi için bkz. Paylaşılan Erişim İmzalarını kullanarak Event Hubs kaynaklarına erişim yetkilendirme.
Diğer olası çözümler için bkz. Event Hubsile ilgili kimlik doğrulama ve yetkilendirme sorunlarını giderme.
Bağlantı sorunları
Hizmete bağlanırken zaman aşımı
Zaman aşımı sorunlarını çözmek için aşağıdaki görevleri deneyin:
- İstemciyi oluştururken belirtilen bağlantı dizesi veya tam etki alanı adının doğru olduğundan emin olun. Daha fazla bilgi için bkz. Event Hubs bağlantı dizesi alma.
- Barındırma ortamınızdaki güvenlik duvarını ve bağlantı noktası izinlerini denetleyin ve AMQP bağlantı noktalarının 5671 ve 5762'nin açık olduğunu doğrulayın.
- Uç noktaya güvenlik duvarı üzerinden izin verildiğinden emin olun.
- 443 numaralı bağlantı noktasına bağlanan WebSockets'i kullanmayı deneyin. Daha fazla bilgi için PublishEventsWithWebSocketsAndProxy.java örneğine bakın.
- Ağınızın belirli IP adreslerini engelleyip engellemediğini görün. Daha fazla bilgi için bkz. Hangi IP adreslerine izin vermeliyim?
- Uygun ise, vekil sunucu yapılandırmasını denetleyin. Daha fazla bilgi için PublishEventsWithWebSocketsAndProxy.java örneğine bakın.
- Ağ bağlantısı sorunlarını giderme hakkında daha fazla bilgi için bkz. Bağlantı sorunlarını giderme - Azure Event Hubs.
TLS/SSL el sıkışma hataları
Araya giren bir ara sunucu kullanıldığında bu hata oluşabilir. Doğrulamak için, barındırma ortamınızda ara sunucu devre dışı bırakılmış olarak test yapmanızı öneririz.
Soket tükenme hataları
Uygulamalar Event Hubs istemcilerini tekil olarak ele alıp uygulamalarının ömrü boyunca tek bir örnek oluşturmayı ve kullanmayı tercih etmelidir. Her istemci türü kendi bağlantısını yönettiğinden bu öneri önemlidir. Yeni bir Event Hubs istemcisi oluşturduğunuzda bu, yuva kullanan yeni bir AMQP bağlantısına neden olur. Ayrıca, istemcilerin java.io.Closeable'den devralması önemlidir, bu nedenle uygulamanızın istemciyi kullanmayı bitirdiğinde close() çağırmaktan sorumlu olması gerekir.
Birden çok istemci oluştururken aynı AMQP bağlantısını kullanmak için EventHubClientBuilder.shareConnection() bayrağını kullanabilir, o EventHubClientBuilder'e bir başvuru tutabilir ve aynı oluşturucu örneğiyle yeni istemciler oluşturabilirsiniz.
IoT bağlantı dizesi kullanarak bağlanma
Bağlantı dizesini çevirmek için IoT Hub hizmetinin sorgulanması gerektiğinden Event Hubs istemci kitaplığı bunu doğrudan kullanamaz. IoTConnectionString.java örneği, IoT bağlantı dizesini Event Hubs ile kullanılabilecek bir dizeye çevirmek için IoT Hub'ın nasıl sorgulandığını açıklar.
Daha fazla bilgi için aşağıdaki makalelere bakın:
- Paylaşılan Erişim İmzalarını kullanarak IoT Hub erişimini denetleme
- Yerleşik uç noktadan cihazdan buluta iletileri okuma
Bağlantı dizesine bileşen eklenemez
Eski Event Hubs istemcileri, müşterilerin Azure portalından alınan bağlantı dizesine bileşen eklemesine izin verdi. Eski istemciler com.microsoft.azure:azure-eventhubs ve com.microsoft.azure:azure-eventhubs-ephpaketlerindedir. Geçerli nesil yalnızca Azure portalı tarafından yayımlanan formda bağlantı dizelerini destekler.
"TransportType=AmqpWebSockets" ekleme
Web yuvalarını kullanmak için PublishEventsWithSocketsAndProxy.java örneğine bakın.
"Authentication=Managed Identity" ekle
Yönetilen Kimlik ile kimlik doğrulaması yapmak için örnek PublishEventsWithAzureIdentity.javabakın.
Azure.Identity kitaplığı hakkında daha fazla bilgi için Kimlik Doğrulaması ve Azure SDK blog gönderimize göz atın.
Günlük kaydını etkinleştirme ve yapılandırma
Java için Azure SDK, uygulama hatalarını gidermeye ve bunların çözümünü hızlandırmaya yardımcı olmak için tutarlı bir günlük hikayesi sunar. Oluşturulan günlükler, kök sorunun bulunmasına yardımcı olmak için terminal durumuna ulaşmadan önce uygulamanın akışını yakalar. Günlüğe kaydetme hakkında yönergeler için bkz. Java için Azure SDK'da günlüğe kaydetmeyi yapılandırma ve Sorun gidermeye genel bakış.
Günlüğü etkinleştirmeye ek olarak, günlük seviyesini VERBOSE veya DEBUG olarak ayarlamak kütüphanenin durumu hakkında içgörüler sağlar. Aşağıdaki bölümlerde, ayrıntılı kayıt etkinleştirildiğinde aşırı iletileri azaltmak amacıyla örnek log4j2 ve logback yapılandırmaları verilmiştir.
Log4J 2'yi yapılandırma
Log4J 2'yi yapılandırmak için aşağıdaki adımları kullanın:
- "Log4j2 için gereken bağımlılıklar bölümünde, günlüğe kaydetme örneği pom.xmliçindekileri kullanarak, pom.xml içindeki bağımlılıkları ekleyin."
- src/main/resources klasörünüze log4j2.xml ekleyin.
Geri kaydetmeyi yapılandırma
Geri kaydetmeyi yapılandırmak için aşağıdaki adımları kullanın:
- "Logback için gereken bağımlılıklar" bölümündeki günlük kaydı örneği pom.xml'yi kullanarak pom.xml'e bağımlılıkları ekleyin.
- src/main/resources klasörünüze logback.xml ekleyin.
AMQP aktarım günlüğünü etkinleştir
İstemci günlüğünü etkinleştirmek sorunlarınızı tanılamak için yeterli değilse, altta yatan AMQP kütüphanesinde bir dosyaya günlüğe kaydetmeyi etkinleştirebilirsiniz Qpid Proton-J. Qpid Proton-J java.util.loggingkullanır. Sonraki bölümde gösterilen içeriklerle bir yapılandırma dosyası oluşturarak günlüğü etkinleştirebilirsiniz. Veya proton.trace.level=ALL ve java.util.logging.Handler uygulaması için istediğiniz yapılandırma seçeneklerini ayarlayın. Uygulama sınıfları ve seçenekleri için Java 8 SDK belgelerindeki java.util.logging paketi bölümüne bakınız.
AMQP aktarım çerçevelerini izlemek için PN_TRACE_FRM=1 ortam değişkenini ayarlayın.
Örnek "logging.properties" dosyası
Aşağıdaki yapılandırma dosyası, TRACE düzeyinde çıktıları Proton-J'den proton-trace.log dosyasına kaydeder.
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
Günlük kaydını azalt
Günlüğe kaydetmeyi azaltmanın bir yolu verbositenin düzeyini değiştirmektir. Başka bir yol, günlükleri com.azure.messaging.eventhubs veya com.azure.core.amqpgibi günlükçü adları paketlerinin dışında tutan filtreler eklemektir. Örnekler için, Log4J 2'yi Yapılandırma ve Logback'i Yapılandırma bölümlerindeki XML dosyalarına bakın.
Bir hata gönderdiğinizde, aşağıdaki paketlerdeki sınıflardan gelen günlük iletileri ilginçtir:
com.azure.core.amqp.implementationcom.azure.core.amqp.implementation.handler- İstisna,
onDelivery'dekiReceiveLinkHandlermesajını görmezden gelebileceğinizdir.
- İstisna,
com.azure.messaging.eventhubs.implementation
Sonraki adımlar
Bu makaledeki sorun giderme kılavuzu, Java istemci kitaplıkları için Azure SDK'sını kullanırken karşılaşabileceğiniz sorunları çözmeye yardımcı olmazsa, Azure SDK for Java GitHub deposunda bir sorun bildirmenizi tavsiye ederiz.