Bagikan melalui


Ringkasan antrean surat mati Microsoft Azure Service Bus

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. Dengan bantuan operator, aplikasi dapat memperbaiki masalah dan mengirim ulang pesan, mencatat log fakta bahwa terdapat kesalahan, dan mengambil tindakan perbaikan.

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 pengiriman peek-lock 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.

Jumlah pesan DLQ

Jumlah pesan dalam antrean surat mati pada tingkat topik tidak dapat diperoleh. Itu 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, Microsoft Azure Service Bus Explorer menunjukkan bahwa ada 62 pesan yang saat ini ada dalam DLQ untuk langganan "test1".

Image showing 62 messages in the dead-letter queue.

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 telah terlampaui.
TTLExpiredException Pesan surat kedaluwarsa dan tidak dapat dikirimkan. Lihat bagian TTL untuk mengetahui detailnya.
SESI ID null. Entitas sesi yang diaktifkan tidak memperbolehkan pesan dengan pengidentifikasi sesi kosong.
MaxTransferHopCountExceeded Jumlah maksimum lompatan yang diizinkan saat diteruskan antar-antrean. Nilai ini diatur ke 4.
MaxDeliveryCountExceeded Pesan tidak dapat ditemukan setelah upaya pengiriman maksimum. Lihat bagian Jumlah pengiriman maksimum untuk mengetahui detailnya.

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 bagian peek-lock, tetapi telah ditinggalkan secara eksplisit atau kunci telah kedaluwarsa, jumlah pengiriman pada pesan ditingkatkan. 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.

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.

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 tidak semua jenis pesan memiliki pelanggan.

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.

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. Ketahuilah bahwa ini mungkin mengakibatkan beberapa pesan melebihi batas kuota 256 KB untuk Tingkat Standar Azure Bus Layanan, lebih lanjut menunjukkan bahwa Tingkat Premium adalah apa yang harus digunakan untuk lingkungan produksi.

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 topik tujuan dihapus, pengecualian 404 akan dinaikkan.
  • Jika antrean atau entitas tujuan melebihi ukuran entitas, pesan dikirim ke TDLQ dari antrean sumber.

Jalur ke antrean surat mati

Anda dapat mengakses antrean surat mati menggunakan sintaks berikut:

<queue path>/$deadletterqueue
<topic path>/Subscriptions/<subscription path>/$deadletterqueue

Mengirim pesan surat mati untuk diolah ulang

Karena mungkin ada data bisnis berharga dalam pesan yang berakhir dalam antrean surat mati, disarankan untuk meminta pesan tersebut diproses ulang ketika operator telah selesai berurusan dengan keadaan yang menyebabkan pesan mati-surat di tempat pertama.

Alat seperti Azure Bus Layanan Explorer memungkinkan pemindahan pesan secara manual antara antrean dan topik. 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 antrean sumber mana, dan karena alasan apa, sambil masih dapat mengirim ulang batch pesan yang akan diproses ulang. Alat seperti ServicePulse dengan NServiceBus menyediakan kemampuan ini.

Langkah berikutnya

Lihat Mengaktifkan surat mati untuk antrean atau langganan untuk mempelajari berbagai cara mengonfigurasi pengaturan surat mati pada akhir masa berlaku pesan.