Pengecualian olahpesan Event Hubs - .NET (warisan)

Bagian ini mencantumkan pengecualian .NET yang dihasilkan oleh API .NET Framework.

Penting

Beberapa pengecualian yang tercantum dalam artikel hanya berlaku untuk library .NET Event Hubs lama. Misalnya: Microsoft.ServiceBus.* pengecualian.

Untuk informasi tentang EventHubsException yang diangkat oleh library .NET baru, lihat EventHubsException - .NET

Pada 30 September 2026, kami akan menghentikan pustaka Azure Bus Layanan SDK WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus, dan com.microsoft.azure.servicebus, yang tidak sesuai dengan panduan Azure SDK. Kami juga akan mengakhiri dukungan protokol SBMP, sehingga Anda tidak akan lagi dapat menggunakan protokol ini setelah 30 September 2026. Migrasikan ke pustaka Azure SDK terbaru, yang menawarkan pembaruan keamanan penting dan kemampuan yang ditingkatkan, sebelum tanggal tersebut.

Meskipun pustaka lama masih dapat digunakan melebihi 30 September 2026, pustaka tersebut tidak akan lagi menerima dukungan dan pembaruan resmi dari Microsoft. Untuk informasi selengkapnya, lihat pengumuman penghentian dukungan.

Kategori pengecualian

API .NET Event Hubs menghasilkan pengecualian yang dapat digolongkan ke dalam kategori berikut, bersama dengan tindakan terkait yang dapat Anda lakukan untuk mencoba memperbaikinya:

Jenis pengecualian

Tabel berikut ini mencantumkan jenis pengecualian olahpesan, dan penyebabnya, dan mencatat tindakan yang disarankan yang bisa Anda lakukan.

Tipe Pengecualian Deskripsi/Penyebab/Contoh Tindakan yang Disarankan Catatan tentang coba lagi otomatis/langsung
TimeoutException Server tidak menanggapi operasi yang diminta dalam waktu yang ditentukan, yang dikontrol oleh OperationTimeout. Server mungkin telah menyelesaikan operasi yang diminta. Pengecualian ini bisa terjadi karena jaringan atau keterlambatan infrastruktur lainnya. Periksa status sistem untuk konsistensi dan coba lagi jika perlu.
Lihat TimeoutException.
Coba lagi mungkin membantu dalam beberapa kasus; tambahkan logika coba lagi ke kode.
InvalidOperationException Operasi pengguna yang diminta tidak diperbolehkan di dalam server atau layanan. Lihat pesan pengecualian untuk detailnya. Misalnya, Complete menghasilkan pengecualian ini jika pesan diterima dalam mode ReceiveAndDelete. Periksa kode dan dokumentasi. Pastikan operasi yang diminta valid. Coba lagi tidak akan membantu.
OperationCanceledException Upaya dilakukan untuk memanggil operasi pada objek yang telah ditutup, dibatalkan, atau dibuang. Dalam kasus yang jarang terjadi, transaksi sekitar sudah dibuang. Periksa kode dan pastikan kode tidak memanggil operasi pada objek yang sudah dibuang. Coba lagi tidak akan membantu.
UnauthorizedAccessException Objek TokenProvider tidak dapat memperoleh token, token tidak valid, atau token tidak berisi klaim yang diperlukan untuk melakukan operasi. Pastikan penyedia token dibuat dengan nilai yang benar. Periksa konfigurasi Layanan Kontrol Akses. Coba lagi mungkin membantu dalam beberapa kasus; tambahkan logika coba lagi ke kode.
ArgumentException
ArgumentNullException
ArgumentOutOfRangeException
Satu atau beberapa argumen yang diberikan ke metode ini tidak valid. URI yang disediakan ke NamespaceManager atau Create berisi segmen jalur. Skema URI yang diberikan ke NamespaceManager atau Create tidak valid. Nilai properti lebih besar dari 32 KB. Periksa kode panggil dan pastikan argumennya benar. Coba lagi tidak akan membantu.
Microsoft.ServiceBus.Messaging MessagingEntityNotFoundException

Microsoft.Azure.EventHubs MessagingEntityNotFoundException
Entitas yang terkait dengan operasi tidak ada atau telah dihapus. Pastikan entitas ada. Coba lagi tidak akan membantu.
MessagingCommunicationException Klien tidak dapat membuat koneksi ke Azure Event Hubs. Pastikan nama host yang disediakan sudah benar dan host dapat dijangkau. Coba lagi mungkin membantu jika ada masalah konektivitas terputus-terputus.
Microsoft.ServiceBus.Messaging ServerBusyException

Microsoft.Azure.EventHubs ServerBusyException
Layanan tidak dapat memproses permintaan saat ini. Klien dapat menunggu dalam jangka waktu tertentu, lalu mencoba kembali operasi.
Lihat ServerBusyException.
Klien dapat mencoba lagi setelah interval tertentu. Jika coba lagi menghasilkan pengecualian yang berbeda, periksa perilaku coba lagi pengecualian tersebut.
MessagingException Pengecualian olahpesan umum yang mungkin ditambahkan dalam kasus berikut: Upaya dilakukan untuk membuat QueueClient menggunakan nama atau jalur yang termasuk dalam jenis entitas yang berbeda (misalnya, topik). Upaya dilakukan untuk mengirim pesan yang lebih besar dari 1 MB. Server atau layanan mengalami kesalahan selama pemrosesan permintaan. Lihat pesan pengecualian untuk detailnya. Pengecualian ini biasanya merupakan pengecualian sementara. Periksa kode dan pastikan bahwa hanya objek yang dapat diserialkan yang digunakan untuk isi pesan (atau gunakan pembuat serialisasi kustom). Periksa dokumentasi untuk jenis nilai properti yang didukung dan hanya gunakan jenis yang didukung. Periksa properti IsTransient. Jika itu benar, Anda dapat mencoba lagi operasi. Perilaku coba lagi tidak terdefinisi dan mungkin tidak membantu.
MessagingEntityAlreadyExistsException Mencoba membuat entitas dengan nama yang sudah digunakan oleh entitas lain di namespace layanan tersebut. Hapus entitas yang ada atau pilih nama yang berbeda untuk entitas yang akan dibuat. Coba lagi tidak akan membantu.
QuotaExceededException Entitas olahpesan telah mencapai ukuran maksimum yang diperbolehkan. Pengecualian ini dapat terjadi jika jumlah maksimum penerima (yaitu 5) telah dibuka pada tingkat grup per konsumen. Buat ruang di entitas dengan menerima pesan dari entitas atau subque-nya.
Lihat QuotaExceededException
Coba lagi mungkin membantu jika pesan telah dihapus sementara ini.
MessagingEntityDisabledException Meminta operasi runtime pada entitas yang dinonaktifkan. Aktifkan entitas. Coba lagi dapat membantu jika entitas telah diaktifkan untuk sementara.
Microsoft.ServiceBus.Messaging MessageSizeExceededException

Microsoft.Azure.EventHubs MessageSizeExceededException
Payload pesan melebihi batas 1-MB. Batas 1-MB ini adalah untuk total pesan, yang dapat mencakup properti sistem dan overhead .NET apa pun. Kurangi ukuran payload pesan, lalu coba lagi operasi. Coba lagi tidak akan membantu.

QuotaExceededException

QuotaExceededException menunjukkan bahwa kuota untuk entitas tertentu telah terlampaui.

Pengecualian ini dapat terjadi jika jumlah maksimum penerima (5) telah dibuka pada tingkat grup per konsumen.

Event Hubs

Azure Event Hubs memiliki batas 20 grup konsumen per Azure Event Hubs. Ketika Anda mencoba untuk membuat lebih banyak, Anda menerima QuotaExceededException.

TimeoutException

TimeoutException menunjukkan bahwa operasi yang dimulai pengguna memakan waktu lebih lama dari batas waktu operasi.

Untuk Event Hubs, batas waktu ditentukan sebagai bagian dari string koneksi, atau melalui ServiceBusConnectionStringBuilder. Pesan kesalahan itu sendiri mungkin berbeda-beda, tetapi selalu berisi nilai batas waktu yang ditentukan untuk operasi saat ini.

Batas waktu diperkirakan akan terjadi selama atau di antara operasi pemeliharaan seperti pembaruan layanan Event Hubs (atau) pembaruan OS pada sumber daya yang menjalankan layanan. Selama pembaruan OS, entitas dipindahkan dan node diperbarui atau di-boot ulang, yang dapat menyebabkan waktu habis. Untuk detail perjanjian tingkat layanan (SLA) untuk layanan Azure Event Hubs, lihat SLA untuk Event Hubs.

Penyebab umum

Ada dua penyebab umum untuk kesalahan ini: konfigurasi yang salah, atau kesalahan layanan sementara.

  • Konfigurasi salah Batas waktu operasi mungkin terlalu kecil untuk kondisi operasional. Nilai default untuk batas waktu operasi di SDK klien adalah 60 detik. Periksa untuk melihat apakah kode Anda memiliki nilai yang diatur ke sesuatu yang terlalu kecil. Kondisi penggunaan jaringan dan CPU dapat memengaruhi waktu yang diperlukan untuk menyelesaikan operasi tertentu, sehingga batas waktu operasi tidak boleh diatur ke nilai kecil.
  • Kesalahan layanan sementara Terkadang layanan Event Hubs dapat mengalami keterlambatan dalam memproses permintaan; misalnya, selama periode lalu lintas padat. Dalam kasus semacam itu, Anda dapat mencoba lagi operasi Anda setelah penundaan, sampai operasi berhasil. Jika operasi yang sama masih gagal setelah beberapa upaya, kunjungi situs status layanan Azure untuk melihat apakah ada pemadaman layanan yang diketahui.

ServerBusyException

Microsoft.ServiceBus.Messaging.ServerBusyException atau Microsoft.Azure.EventHubs.ServerBusyException mengindikasikan bahwa server kelebihan beban. Ada dua kode kesalahan yang relevan untuk pengecualian ini.

Kode Kesalahan 50002

Kesalahan ini dapat terjadi karena salah satu dari dua alasan:

  • Beban tidak didistribusikan secara merata di semua partisi di event hub, dan satu partisi mencapai batasan unit throughput lokal.

    Resolusi: Merevisi strategi distribusi partisi atau mencoba EventHubClient.Send(eventDataWithOutPartitionKey) mungkin dapat membantu.

  • Namespace Event Hubs tidak memiliki unit throughput yang memadai (Anda dapat memeriksa layar Metrik di jendela namespace Event Hubs di portal Azure untuk mengonfirmasi). Portal menunjukkan informasi agregat (1 menit), tetapi kami mengukur throughput secara real time - jadi itu hanya perkiraan.

    Resolusi: Meningkatkan unit throughput pada namespace dapat membantu.

    Anda dapat mengonfigurasi unit throughput pada halaman Skala atau halamanGambaran Umum dari namespace Event Hubs Anda di portal Azure. Atau, Anda dapat menggunakan Inflate Otomatis, yang secara otomatis meningkatkan skala dengan menaikkan jumlah unit throughput, untuk memenuhi kebutuhan penggunaan.

    Unit Throughput (TUs) berlaku untuk semua event hubs di namespace Event Hubs. Ini berarti Anda membeli TUs di tingkat namespace dan dibagikan di antara event hub di bawah namespace tersebut. Setiap TU memberikan nama namespace sesuai dengan kemampuan berikut:

    • Hingga 1 MB per detik peristiwa ingress (peristiwa yang dikirim ke event hub), tetapi tidak lebih dari 1000 peristiwa ingress, operasi manajemen, atau panggilan API kontrol per detik.
    • Hingga 2 MB per detik peristiwa egress (peristiwa yang dikonsumsi dari event hub), tetapi tidak lebih dari 4096 peristiwa egress.
    • Penyimpanan peristiwa hingga 84 GB (cukup untuk periode retensi 1 jam default).

    Pada halaman Gambaran Umum, di bagian Perlihatkan metrik, beralihlah ke tab Throughput. Pilih bagan untuk membukanya di jendela yang lebih besar dengan interval 1 menit pada sumbu x. Lihatlah nilai puncak dan bagi dengan 60 untuk mendapatkan byte masuk/detik atau byte keluar/detik. Gunakan pendekatan serupa untuk menghitung jumlah permintaan per detik pada waktu sibuk pada tab Permintaan.

    Jika Anda melihat nilai yang lebih tinggi dari jumlah batas TUs * (1 MB per detik untuk ingress atau 1000 permintaan untuk ingress/detik, 2 MB per detik untuk egress), tingkatkan jumlah TUs dengan menggunakan Skala (di menu kiri) halaman namespace Event Hubs untuk menaikkan skala secara manual atau untuk menggunakan fitur Auto-inflate dari Event Hubs. Anda dapat menskalakan hingga 40 TU saat Anda menskalakan secara manual atau menskalakan namespace secara otomatis.

Kode kesalahan: 50008

Kesalahan ini seharusnya jarang terjadi. Ini terjadi ketika kode yang menjalankan kontainer untuk namespace Anda hampir habis pada CPU - tidak lebih dari beberapa detik sebelum penyeimbang muatan Event Hubs dimulai.

Resolusi: Batasi panggilan ke metode GetRuntimeInformation. Azure Event Hubs mendukung hingga 50 panggilan per detik per grup konsumen ke GetRuntimeInfo per detik. Anda mungkin menerima pengecualian yang mirip dengan yang berikut setelah batas tercapai:

ExceptionId: 00000000000-00000-0000-a48a-9c908fbe84f6-ServerBusyException: The request was terminated because the namespace 75248:aaa-default-eventhub-ns-prodb2b is being throttled. Error code : 50008. Please wait 10 seconds and try again.

Langkah berikutnya

Anda dapat mempelajari selengkapnya tentang Azure Event Hubs dengan mengunjungi tautan berikut: