Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini membahas teknik investigasi kegagalan, kesalahan umum untuk jenis kredensial di pustaka Azure Event Hubs, dan langkah-langkah mitigasi untuk mengatasi kesalahan ini. Selain teknik dan panduan pemecahan masalah umum yang berlaku terlepas dari kasus penggunaan Azure Event Hubs, artikel berikut ini mencakup fitur tertentu dari pustaka Azure Event Hubs:
- Memecahkan Masalah Penghasil Azure Event Hubs
- Memecahkan masalah prosesor acara Azure Event Hubs
- Memecahkan masalah performa Azure Event Hubs
Sisa artikel ini mencakup teknik pemecahan masalah umum dan panduan yang berlaku untuk semua pengguna pustaka Azure Event Hubs.
Menangani pengecualian Azure Event Hubs
Semua pengecualian Event Hubs dibungkus dalam AmqpException. Pengecualian ini sering memiliki kode kesalahan AMQP yang mendasar yang menentukan apakah kesalahan harus dicoba kembali. Untuk kesalahan yang dapat diulang (yaitu, amqp:connection:forced atau amqp:link:detach-forced), perpustakaan klien mencoba memulihkan dari kesalahan ini berdasarkan opsi pengulangan yang ditentukan saat menginstansiasi klien. Untuk mengonfigurasi opsi coba lagi, ikuti contoh menerbitkan peristiwa ke partisi tertentu. Jika kesalahan tidak dapat dicoba ulang, ada beberapa masalah konfigurasi yang perlu diselesaikan.
Cara yang direkomendasikan untuk mengatasi pengecualian spesifik yang diwakili oleh pengecualian AMQP adalah dengan mengikuti panduan Azure Event Hubs Messaging Exceptions.
Menemukan informasi yang relevan dalam pesan pengecualian
AmqpException berisi tiga bidang berikut, yang menjelaskan kesalahan:
- getErrorCondition: Kesalahan AMQP yang mendasar. Untuk deskripsi kesalahan, lihat dokumentasi AmqpErrorCondition Enum atau spesifikasi OASIS AMQP 1.0.
- adalah nilai transient: Nilai yang menunjukkan apakah memungkinkan untuk mencoba melakukan operasi yang sama. Klien SDK menerapkan kebijakan coba lagi ketika kesalahan bersifat sementara.
-
getErrorContext: Berisi informasi berikut tentang asal kesalahan AMQP:
- LinkErrorContext: Kesalahan yang terjadi di tautan kirim atau terima.
- SessionErrorContext: Kesalahan yang terjadi dalam sesi.
- AmqpErrorContext: Kesalahan yang terjadi dalam koneksi atau kesalahan AMQP umum.
Pengecualian yang umum ditemui
amqp:connection:forced dan amqp:link:detach-forced
Ketika koneksi ke Azure Event Hubs diam, layanan memutuskan sambungan klien setelah beberapa waktu. Masalah ini tidak menjadi masalah karena klien membuat ulang koneksi saat operasi layanan diminta. Untuk informasi selengkapnya, lihat kesalahan AMQP di Azure Service Bus.
Masalah izin
AmqpException dengan AmqpErrorCondition dari amqp:unauthorized-access menandakan bahwa kredensial yang Anda berikan tidak mengizinkan untuk melakukan tindakan (menerima atau mengirim) dengan Azure Event Hubs. Untuk mengatasi masalah ini, coba tugas berikut:
- Periksa kembali apakah Anda memiliki string koneksi yang benar. Untuk informasi selengkapnya, lihat Mendapatkan string koneksi Event Hubs.
- Pastikan token tanda tangan akses bersama (SAS) Anda dihasilkan dengan benar. Untuk informasi selengkapnya, lihat Mengotorisasi akses ke sumber daya Azure Event Hubs menggunakan Tanda Tangan Akses Bersama.
Untuk solusi lain yang mungkin, lihat Memecahkan masalah autentikasi dan otorisasi dengan Azure Event Hubs.
Masalah konektivitas
Waktu habis saat mencoba koneksi ke layanan
Untuk mengatasi masalah batas waktu habis, coba langkah berikut:
- Verifikasi bahwa string koneksi atau nama domain yang sepenuhnya memenuhi syarat yang ditentukan saat membuat klien sudah benar. Untuk informasi selengkapnya, lihat Mendapatkan string koneksi Event Hubs.
- Periksa izin firewall dan port di lingkungan hosting Anda dan verifikasi bahwa port AMQP 5671 dan 5762 terbuka.
- Pastikan ujung jaringan diizinkan melalui firewall.
- Coba gunakan WebSockets, yang tersambung pada port 443. Untuk informasi selengkapnya, lihat sampel PublishEventsWithWebSocketsAndProxy.java.
- Lihat apakah jaringan Anda memblokir alamat IP tertentu. Untuk informasi selengkapnya, lihat Alamat IP apa yang perlu saya izinkan?
- Jika berlaku, periksa konfigurasi proksi. Untuk informasi selengkapnya, lihat sampel PublishEventsWithWebSocketsAndProxy.java.
- Untuk informasi selengkapnya tentang pemecahan masalah konektivitas jaringan, lihat Memecahkan masalah konektivitas - Azure Event Hubs.
Kegagalan jabat tangan TLS/SSL
Kesalahan ini dapat terjadi ketika proksi penyadapan digunakan. Untuk memverifikasi, sebaiknya uji di lingkungan hosting Anda dengan proksi dinonaktifkan.
Kesalahan kehabisan soket
Aplikasi harus lebih suka memperlakukan klien Azure Event Hubs sebagai singleton, membuat dan menggunakan satu instans selama masa pakai aplikasi mereka. Rekomendasi ini penting karena setiap jenis klien mengelola koneksinya. Saat Anda membuat klien Azure Event Hubs baru, itu menghasilkan koneksi AMQP baru, yang menggunakan soket. Selain itu, penting bahwa klien mewarisi dari java.io.Closeable, sehingga aplikasi Anda harus memanggil close() setelah selesai menggunakan klien tersebut.
Untuk menggunakan koneksi AMQP yang sama saat membuat beberapa klien, Anda dapat menggunakan bendera EventHubClientBuilder.shareConnection(), menyimpan referensi ke EventHubClientBuildertersebut, dan membuat klien baru dari instans penyusun yang sama.
Menghubungkan menggunakan sambungan IoT
Karena menerjemahkan string koneksi memerlukan kueri layanan IoT Hub, pustaka klien Azure Event Hubs tidak dapat menggunakannya secara langsung. Sampel IoTConnectionString.java menjelaskan cara mengkueri IoT Hub untuk menerjemahkan string koneksi IoT menjadi string yang dapat digunakan dengan Azure Event Hubs.
Untuk informasi selengkapnya, lihat artikel berikut ini:
- Mengontrol akses ke IoT Hub menggunakan Tanda Tangan Akses Bersama
- Membaca pesan perangkat ke cloud dari titik akhir bawaan
Tidak dapat menambahkan komponen ke string koneksi
Klien Event Hubs warisan memungkinkan pelanggan untuk menambahkan komponen ke string koneksi yang diambil dari portal Azure. Klien warisan berada dalam paket com.microsoft.azure:azure-eventhubs dan com.microsoft.azure:azure-eventhubs-eph. Generasi saat ini hanya mendukung string koneksi dalam formulir yang diterbitkan oleh portal Microsoft Azure.
Tambahkan "TransportType=AmqpWebSockets"
Untuk menggunakan soket web, lihat sampel PublishEventsWithSocketsAndProxy.java.
Tambahkan "Authentication=Managed Identity"
Untuk mengautentikasi dengan Identitas Terkelola, lihat contoh PublishEventsWithAzureIdentity.java.
Untuk informasi selengkapnya tentang pustaka Azure.Identity, lihat postingan blog kami yang berjudul Autentikasi dan Azure SDK.
Mengaktifkan dan mengonfigurasi pengelogan
Azure SDK for Java menawarkan cerita pengelogan yang konsisten untuk membantu memecahkan masalah kesalahan aplikasi dan untuk membantu mempercepat resolusinya. Log yang dihasilkan menangkap alur aplikasi sebelum mencapai status terminal untuk membantu menemukan masalah akar. Untuk panduan tentang pengelogan, lihat Mengonfigurasi pengelogan di Azure SDK for Java dan gambaran umum pemecahan masalah .
Selain mengaktifkan pengelogan, atur tingkat log ke VERBOSE atau DEBUG memberikan wawasan tentang status pustaka. Bagian berikut menunjukkan contoh konfigurasi log4j2 dan logback untuk mengurangi pesan yang berlebihan saat pengelogan verbose diaktifkan.
Mengonfigurasi Log4J 2
Gunakan langkah-langkah berikut untuk mengonfigurasi Log4J 2:
- Tambahkan dependensi di pom.xml Anda dengan menggunakan yang dari sampel logging pom.xml, di bagian "Dependensi yang diperlukan untuk Log4j2".
- Tambahkan
log4j2.xml ke folder src/main/resourcesAnda.
Mengonfigurasi logback
Gunakan langkah-langkah berikut untuk mengonfigurasi logback:
- Tambahkan dependensi di pom.xml Anda menggunakan dependensi dari sampel pengelogan pom.xml, di bagian "Dependensi yang diperlukan untuk logback".
- Tambahkan
logback.xml ke folder src/main/resourcesAnda.
Mengaktifkan pengelogan transportasi AMQP
Jika mengaktifkan pengelogan klien tidak cukup untuk mendiagnosis masalah Anda, Anda dapat mengaktifkan pengelogan ke file di pustaka AMQP yang mendasar, Qpid Proton-J. Qpid Proton-J menggunakan java.util.logging. Anda dapat mengaktifkan pengelogan dengan membuat file konfigurasi dengan konten yang diperlihatkan di bagian berikutnya. Atau, atur proton.trace.level=ALL dan opsi konfigurasi apa pun yang Anda inginkan untuk implementasi java.util.logging.Handler. Untuk kelas implementasi dan opsinya, lihat Paket java.util.logging dalam dokumentasi Java 8 SDK.
Untuk melacak bingkai transportasi AMQP, atur variabel lingkungan PN_TRACE_FRM=1.
Contoh file "logging.properties"
File konfigurasi berikut mencatat output tingkat TRACE dari Proton-J ke file 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
Mengurangi pengelogan
Salah satu cara untuk mengurangi catatan log adalah dengan mengubah verbositas. Cara lain adalah menambahkan filter yang mengecualikan log dari paket nama pencatat seperti com.azure.messaging.eventhubs atau com.azure.core.amqp. Untuk beberapa contoh, lihat file XML di bagian Konfigurasi Log4J 2 dan Konfigurasi logback.
Saat Anda mengajukan bug, pesan log dari kelas-kelas dalam paket berikut sangat menarik perhatian:
com.azure.core.amqp.implementationcom.azure.core.amqp.implementation.handler- Pengecualiannya adalah Anda dapat mengabaikan pesan
onDeliverydiReceiveLinkHandler.
- Pengecualiannya adalah Anda dapat mengabaikan pesan
com.azure.messaging.eventhubs.implementation
Langkah berikutnya
Jika panduan pemecahan masalah dalam artikel ini tidak membantu mengatasi masalah saat Anda menggunakan pustaka klien Azure SDK for Java, kami sarankan Anda mengajukan masalah di repositori Azure SDK for Java GitHub .