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.
Langganan topik dan antrean Azure Service Bus menyediakan sub-antrean sekunder, yang disebut antrean huruf mati (DLQ). Antrean surat mati tidak perlu dibuat secara eksplisit dan tidak dapat dihapus atau dikelola secara independen dari entitas utama.
Artikel ini menjelaskan antrean surat mati di Microsoft Azure Service Bus. Sebagian besar diskusi diilustrasikan oleh contoh antrean Surat Mat di GitHub.
Antrean surat mati
Tujuan dari dead-letter queue adalah untuk menyimpan pesan yang tidak dapat dikirimkan ke penerima, atau pesan yang tidak dapat diproses. Pesan kemudian dapat dihapus dari DLQ dan diperiksa. Aplikasi mungkin memungkinkan pengguna memperbaiki masalah dan mengirim ulang pesan.
Dari perspektif API dan protokol, DLQ sebagian besar mirip dengan antrean lainnya, kecuali pesan hanya dapat dikirimkan melalui operasi surat mati entitas induk. Selain itu, TTL tidak diamati, dan Anda tidak dapat mengirimkan pesan surat mati dari DLQ. Antrean surat mati sepenuhnya mendukung operasi normal seperti pengiriman peek-lock, terima dan hapus, dan operasi transaksi.
Tidak ada pembersihan otomatis DLQ. Pesan tetap berada di DLQ hingga Anda secara eksplisit mengambilnya dari DLQ dan menyelesaikan pesan surat mati.
Jalur ke antrean surat mati
Anda dapat mengakses antrean surat mati menggunakan sintaks berikut:
<queue path>/$deadletterqueue
<topic path>/Subscriptions/<subscription path>/$deadletterqueue
Di .NET, Anda dapat menggunakan metode .FormatDeadLetterPath
QueueClient.FormatDeadLetterPath(queuePath)
SubscriptionClient.FormatDeadLetterPath(topicPath, subscriptionName)
Jumlah pesan DLQ
Mendapatkan jumlah pesan dalam antrean surat mati pada tingkat topik tidak berlaku karena pesan tidak berada di tingkat topik. Sebaliknya, jika pengirim mengirim pesan ke topik, pesan akan diteruskan ke langganan untuk topik dalam milidetik dan dengan demikian tidak lagi berada di tingkat topik. Jadi, Anda dapat melihat pesan di DLQ yang terkait dengan langganan untuk topik tersebut. Dalam contoh berikut, Service Bus Explorer menunjukkan bahwa ada 62 pesan yang saat ini ada di DLQ untuk langganan: test1.
Anda juga bisa mendapatkan jumlah pesan DLQ menggunakan perintah Azure CLI: az servicebus topic subscription show
.
Memindahkan pesan ke DLQ
Ada beberapa aktivitas di Microsoft Azure Service Bus yang menyebabkan pesan dimasukkan ke DLQ dari dalam mesin perpesanan itu sendiri. Aplikasi juga dapat secara eksplisit memindahkan pesan ke DLQ. Dua properti berikut (alasan surat mati dan deskripsi surat mati) ditambahkan ke pesan bersurat mati. Aplikasi dapat menentukan kodenya sendiri untuk properti alasan surat mati, tetapi sistem menetapkan nilai berikut.
Alasan surat mati | Deskripsi kesalahan surat mati |
---|---|
HeaderSizeExceeded |
Kuota ukuran untuk aliran ini melebihi batas. |
TTLExpiredException |
Pesan surat kedaluwarsa dan tidak dapat dikirimkan. Lihat bagian TTL untuk mengetahui detailnya. |
Session ID is null . |
Entitas sesi yang diaktifkan tidak memperbolehkan pesan dengan pengidentifikasi sesi kosong. |
MaxTransferHopCountExceeded |
Jumlah maksimum hop yang diizinkan saat meneruskan antar antrean melebihi batas. Nilai ini diatur ke 4. |
MaxDeliveryCountExceeded |
Pesan tidak dapat ditemukan setelah upaya pengiriman maksimum. Lihat bagian Jumlah pengiriman maksimum untuk mengetahui detailnya. |
Waktu untuk aktif
Saat Anda mengaktifkan surat mati dalam antrean atau langganan, semua pesan yang kedaluwarsa dipindahkan ke DLQ. Kode alasan surat mati diatur ke: TTLExpiredException
. Pesan yang ditangguhkan tidak akan dihapus menyeluruh dan dipindahkan ke antrean surat mati setelah kedaluwarsa. Perilaku ini secara desain.
Jumlah pengiriman maksimum
Ada batasan jumlah upaya untuk mengirimkan pesan untuk antrean dan langganan Bus Layanan. Nilai defaultnya adalah 10. Setiap kali pesan dikirimkan di bawah kunci intip, tetapi secara eksplisit ditinggalkan atau kunci kedaluwarsa, jumlah pengiriman pada pesan akan bertambah. Jika jumlah pengiriman melebihi batas, pesan akan dipindahkan ke DLQ. Alasan surat mati untuk pesan di DLQ diatur ke: MaxDeliveryCountExceeded
. Perilaku ini tidak dapat dinonaktifkan, tetapi Anda dapat mengatur jumlah pengiriman maksimum ke jumlah besar.
Kesalahan saat memproses aturan langganan
Jika Anda mengaktifkan surat mati dalam pengecualian evaluasi filter, kesalahan apa pun yang terjadi saat eksekusi aturan filter SQL langganan akan diambil dalam DLQ bersama dengan pesan yang menyinggung. Jangan gunakan opsi ini di lingkungan produksi tempat Anda memiliki jenis pesan yang dikirim ke topik, yang tidak memiliki pelanggan, karena dapat mengakibatkan banyak pesan DLQ. Dengan demikian, pastikan bahwa semua pesan yang dikirim ke topik memiliki setidaknya satu langganan yang cocok.
Surat mati tingkat aplikasi
Selain fitur surat mati yang disediakan sistem, aplikasi dapat menggunakan DLQ untuk secara eksplisit menolak pesan yang tidak dapat diterima. Fitur ini dapat menyertakan pesan yang tidak dapat diproses dengan benar karena masalah sistem apa pun, pesan yang menyimpan payload yang cacat, atau pesan yang gagal autentikasi saat beberapa skema keamanan tingkat pesan digunakan.
Di .NET, ini dapat dilakukan dengan memanggil metode ServiceBusReceiver.DeadLetterMessageAsync.
Kami menyarankan agar Anda menyertakan jenis pengecualian dalam DeadLetterReason
dan jejak tumpukan pengecualian karena DeadLetterDescription
mempermudah pemecahan masalah yang mengakibatkan pesan menjadi surat mati. Ini mungkin mengakibatkan beberapa pesan melebihi batas kuota 256 KB untuk Tingkat Standar Azure Service Bus. Anda dapat meningkatkan namespace Bus Layanan Anda dari tingkat standar ke tingkat premium untuk memiliki kuota dan batas yang lebih tinggi.
Dead-lettering dalam skenario penerusan otomatis
Pesan dikirim ke antrean surat mati dalam kondisi berikut:
- Pesan melewati lebih dari empat antrian atau topik yang dirantai bersama-sama.
- Antrean atau topik tujuan dinonaktifkan atau dihapus.
- Antrean atau topik tujuan melebihi ukuran entitas maksimum.
Surat gagal dalam pengiriman melalui skenario
- Jika antrean atau topik tujuan dinonaktifkan, pesan dikirim ke antrean surat mati transfer (TDLQ) dari antrean sumber.
- Jika antrean atau entitas tujuan melebihi ukuran entitas, pesan dikirim ke TDLQ dari antrean sumber.
Mengirim pesan surat mati untuk diolah ulang
Setelah Anda mengatasi masalah yang menyebabkan pesan mati, Anda dapat mengirimkannya kembali ke antrean atau topik untuk diproses ulang. Dalam beberapa kasus, jika ada banyak pesan dalam antrean surat mati yang perlu dipindahkan, kode seperti ini dapat membantu memindahkan semuanya sekaligus. Operator sering lebih suka memiliki antarmuka pengguna sehingga mereka dapat memecahkan masalah jenis pesan mana yang gagal diproses, dari mana antrean sumber, dan karena alasan apa, sambil masih dapat mengirim ulang batch pesan yang akan diproses ulang.
Alat yang tersedia
- Azure Bus Layanan Explorer memungkinkan pemindahan pesan secara manual antara antrean dan topik. Ini memungkinkan Anda untuk melihat melalui daftar pesan dan mengirim ulang pesan untuk diolah kembali. Ini tersedia melalui portal Azure, terlepas dari SDK yang Anda gunakan untuk mengirim pesan.
- ServicePulse dengan NServiceBus menyederhanakan penanganan kesalahan Anda dengan dasbor terpusat ini. Memvisualisasikan, mengelompokkan, memfilter, dan mencari kesalahan dengan cepat, dan mencoba kembali pesan individual atau yang dikelompokkan secara efisien. Tersedia untuk titik akhir NServiceBus.
- ServicePulse dengan MassTransit menyediakan dasbor terpusat untuk manajemen kesalahan. Anda dapat memvisualisasikan, mengelompokkan, memfilter, dan mencari kesalahan menggunakan berbagai kriteria. Ini juga memungkinkan pengeditan dan mencoba kembali pesan individual, atau grup pesan percobaan ulang batch. Tersedia untuk titik akhir MassTransit.
Konten terkait
Lihat Mengaktifkan surat mati untuk antrean atau langganan untuk mempelajari berbagai cara mengonfigurasi pengaturan surat mati pada akhir masa berlaku pesan.