Ketika sebuah pesan gagal dikonsumsi setelah mencapai jumlah maksimum percobaan ulang, pesan tersebut menjadi pesan dead-letter. Ini adalah satu-satunya kondisi yang menghasilkan pesan dead-letter. Secara default, ApsaraMQ for RocketMQ membuang pesan dead-letter. Untuk menyimpannya guna pemulihan atau troubleshooting, aktifkan fitur penyimpanan pesan dead-letter agar pesan tersebut diarahkan ke topik dead-letter khusus.
Cara kerja
Pesan dead-letter merupakan status akhir dalam siklus hidup percobaan ulang konsumsi:
Konsumen menerima sebuah pesan dan gagal memprosesnya.
Broker mencoba mengirimkan ulang hingga mencapai jumlah maksimum percobaan ulang yang telah dikonfigurasi.
Jika pesan tersebut tetap gagal setelah semua percobaan ulang, pesan tersebut menjadi pesan dead-letter.
Untuk menyimpan pesan dead-letter alih-alih membuangnya, aktifkan fitur penyimpanan pesan dead-letter di Konsol. Pesan dead-letter kemudian akan disimpan ke topik dead-letter yang telah ditentukan.

Apa yang terjadi ketika sebuah pesan disimpan ke topik dead-letter
ID pesan baru dihasilkan.
Atribut kustom dan isi pesan tetap tidak berubah.
Periode retensi dimulai sejak pesan disimpan ke topik dead-letter, bukan sejak waktu pengiriman awal. Misalnya, jika sebuah pesan dikirim ke broker pada pukul 13.00.00 dan menjadi pesan dead-letter pada pukul 15.00.00, periode retensinya dimulai pada pukul 15.00.00.
Aktifkan penyimpanan pesan dead-letter
Untuk mengaktifkan penyimpanan pesan dead-letter di Konsol ApsaraMQ for RocketMQ:
Pada halaman Instances, klik nama instans.
Di panel navigasi sebelah kiri, klik Groups. Pada halaman Groups, klik Create Group.

Proses pesan dead-letter
Berlangganan kelompok konsumen khusus ke topik dead-letter untuk mengonsumsi dan melakukan troubleshooting pesan yang gagal secara terpisah dari traffic bisnis normal.
Lacak topik asal
Untuk mengidentifikasi topik asal sebuah pesan dead-letter, gunakan salah satu pendekatan berikut:
Konvensi penamaan: Petakan nama topik dead-letter ke nama topik asal. Misalnya, jika topik asal adalah
testTopic, beri nama topik dead-letter sebagaiDLQ-testTopic.Atribut kustom: Sertakan topik asal dalam properti pesan:
messageBuilder.addProperty("originalTopic", "testTopic")
Hindari avalanche pesan
Penanganan pesan dead-letter yang tidak tepat dapat menyebabkan kegagalan berantai:
Jangan pernah menggunakan topik asal sebagai topik dead-letter. Hal ini menciptakan loop percobaan ulang di mana pesan dead-letter terus-menerus berputar antara topik asal dan proses konsumsi yang gagal tanpa henti. Jika sistem mendeteksi bahwa topik dead-letter sama dengan topik asal, pesan tersebut akan dibuang.
Jangan mengonsumsi pesan dead-letter dengan kelompok konsumen yang memproses pesan normal. Gunakan kelompok konsumen terpisah yang didedikasikan khusus untuk topik dead-letter.
Pantau pesan dead-letter
Konfigurasikan aturan alert untuk mendeteksi kegagalan konsumsi lebih awal dan merespons sebelum pesan dead-letter menumpuk.
Metrik yang tersedia
Sumber | Metrik | Deskripsi |
| Pesan dead-letter baru per menit | |
| Pesan dead-letter baru per menit dalam suatu topik dari kelompok konsumen | |
| Pesan dead-letter baru per menit dalam kelompok konsumen | |
Consumer lag | Pesan dead-letter yang belum dikonsumsi dalam topik dead-letter | |
| Consumer lag per kelompok konsumen per topik |
Pendekatan pemantauan yang direkomendasikan
Deteksi kegagalan baru: Pantau metrik
rocketmq_send_to_dlq_messagesdi dasbor, atau tambahkan metrikSendDLQMessageCountPerGidsebagai alert CloudMonitor.Lacak backlog yang belum diproses: Periksa metrik Consumer lag di dasbor untuk topik dead-letter, atau tambahkan metrik
ConsumerLagPerGidTopicsebagai alert CloudMonitor.
Batasan
Topik dead-letter harus menggunakan tipe normal message atau tipe ordered message.
Topik asal sebuah pesan tidak dapat digunakan sebagai topik dead-letter. Jika sistem mendeteksi kecocokan, pesan tersebut akan dibuang.
Pesan dead-letter dari topik yang berbeda dapat disimpan ke topik dead-letter yang sama.
Menghapus kelompok konsumen tidak menghapus topik dead-letter yang terkait dengannya.
Untuk menghapus topik yang terkait dengan kebijakan dead-letter, putuskan asosiasi topik tersebut dari kebijakan terlebih dahulu.