All Products
Search
Document Center

ApsaraMQ for RabbitMQ:Dead-letter exchanges

Last Updated:Aug 07, 2026

Pesan terkadang gagal—konsumen menolaknya, upaya pengiriman ulang habis, atau waktu hidup (TTL) berakhir. Alih-alih kehilangan pesan tersebut, dead-letter exchange (DLX) menangkapnya dan mengarahkannya ke antrian khusus untuk pemeriksaan, pemrosesan ulang, atau peringatan.

Bagian berikut mencakup konsep utama, proses routing, metode konfigurasi, serta header pesan dead-letter untuk ApsaraMQ for RabbitMQ.

Konsep utama

TermDefinisi
Dead-letter exchangeExchange yang menerima pesan dead-letter dan mengarahkannya ke antrian dead-letter berdasarkan binding key, routing key, dan atribut header. Tipe exchange standar apa pun — direct, fanout, topic, atau headers — dapat berfungsi sebagai dead-letter exchange.
Dead-letter routing keyRouting key yang digunakan untuk mengarahkan pesan dead-letter. Jika tidak ditentukan, pesan mempertahankan routing key aslinya.
Dead-letter messagePesan yang diteruskan ke dead-letter exchange. Lihat Kapan pesan menjadi dead-letter untuk daftar lengkap pemicunya.
Dead-letter queueAntrian yang di-bind ke dead-letter exchange dan menyimpan pesan dead-letter.

Kapan pesan menjadi dead-letter

Pesan dikirim ke dead-letter exchange ketika salah satu kondisi berikut terjadi:

  • Negative acknowledgment — Konsumen memanggil basic.reject atau basic.nack dengan parameter requeue diatur ke false.

  • Retry exhaustion — Pesan gagal dikonsumsi setelah 16 kali percobaan ulang. Untuk detailnya, lihat Consumption retry policies.

  • TTL expiration — Pesan berada di antrian lebih lama dari TTL yang dikonfigurasi. Untuk detailnya, lihat Message TTL.

Cara kerja

  1. Produsen memublikasikan pesan ke exchange.

  2. Exchange mengarahkan pesan ke antrian.

  3. Konsumen mengambil pesan dari antrian.

  4. Pesan menjadi dead-letter—melalui negative acknowledgment, setelah 16 kali percobaan ulang gagal, atau ketika TTL-nya berakhir.

  5. Antrian meneruskan pesan dead-letter ke exchange yang ditentukan oleh x-dead-letter-exchange, menggunakan routing key yang ditentukan oleh x-dead-letter-routing-key.

  6. Dead-letter exchange mengarahkan pesan ke antrian dead-letter yang di-bind.

Dead-letter message routing flow

Catatan penggunaan

  • Persyaratan vhost yang sama — Dead-letter exchange dan antrian yang di-bind-nya harus berada dalam vhost yang sama. Routing dead-letter lintas-vhost tidak didukung.

  • Binding DLX yang tidak dapat diubah — Setelah antrian dibuat dengan dead-letter exchange, konfigurasi DLX tidak dapat diubah. Hapus antrian tersebut dan buat yang baru dengan konfigurasi yang diperbarui.

  • Tidak ada DLX yang dikonfigurasi — Jika antrian tidak memiliki dead-letter exchange yang dikonfigurasi, pesan akan dihapus secara permanen setelah jumlah maksimum upaya pengiriman (16 secara default) terlampaui. Jika dead-letter exchange dikonfigurasi, pesan akan diarahkan ke antrian dead-letter yang sesuai.

Konfigurasi dead-letter exchange

Siapkan dead-letter exchange melalui Konsol ApsaraMQ for RabbitMQ, API CreateQueue, atau SDK client.

Konsol

Konfigurasikan dead-letter exchange saat membuat antrian di Konsol.

  1. Masuk ke Konsol ApsaraMQ for RabbitMQ.

  2. Pada halaman Overview, di bagian Resource Distribution, pilih wilayah.

  3. Pada halaman Instances, klik nama instans target.

  4. Di panel navigasi sebelah kiri, klik Queues.

  5. Pada halaman Queues, pilih vhost dari daftar drop-down Change di samping vhost, lalu klik Create Queue.

  6. Di panel Create Queue, atur parameter berikut, lalu klik OK.

ParameterDeskripsi
Queue NameNama antrian. Mendukung huruf, angka, tanda hubung (-), garis bawah (_), titik (.), tanda pagar (#), garis miring maju (/), dan tanda @ (@). Panjang: 1 hingga 255 karakter. Tidak dapat diubah setelah dibuat. Awalan amq. dicadangkan dan tidak dapat digunakan.
Auto DeleteApakah antrian akan dihapus secara otomatis setelah konsumen terakhir berhenti berlangganan. Nilai yang valid: true, false.
Advanced SettingsKlik untuk membuka. Konfigurasikan dead-letter exchange dan pengaturan terkait:
- DeadLetterExchangeExchange yang menerima pesan dead-letter dari antrian ini.
- DeadLetterRoutingKeyRouting key untuk pesan dead-letter. Dead-letter exchange menggunakan kunci ini untuk mengarahkan pesan ke antrian dead-letter yang sesuai.
- MessageTTLTTL pesan dalam milidetik. Pesan yang tidak dikonsumsi dalam periode ini akan menjadi pesan dead-letter dan diteruskan ke dead-letter exchange. Untuk detailnya, lihat Message TTL.

API

Panggil operasi CreateQueue dengan parameter dead-letter exchange. Untuk detailnya, lihat CreateQueue.

Client SDK

Tentukan x-dead-letter-exchange dan x-dead-letter-routing-key dalam argumen antrian saat mendeklarasikan antrian.

Contoh Java berikut mendeklarasikan exchange direct bernama some.exchange.name sebagai dead-letter exchange dengan demo-routing-key sebagai dead-letter routing key:

channel.exchangeDeclare("some.exchange.name", "direct");

Map<String, Object> args = new HashMap<String, Object>();
args.put("x-dead-letter-exchange", "some.exchange.name");
args.put("x-dead-letter-routing-key", "demo-routing-key");

channel.queueDeclare("MyQueue", false, false, false, args);

Header pesan dead-letter

Saat pesan menjadi dead-letter, ApsaraMQ for RabbitMQ menambahkan header metadata untuk melacak riwayat event tersebut.

Header ringkasan

HeaderDeskripsi
x-first-death-exchangeExchange tempat pesan berada saat pertama kali menjadi dead-letter.
x-first-death-queueAntrian tempat pesan berada saat pertama kali menjadi dead-letter.
x-first-death-reasonAlasan pesan pertama kali menjadi dead-letter.
x-death-totalJumlah total kali pesan menjadi dead-letter.

Array x-death

Header x-death adalah array entri, masing-masing mencatat event dead-letter dengan bidang-bidang berikut:

BidangDeskripsi
reasonMengapa pesan menjadi dead-letter.
queueAntrian tempat pesan berada saat menjadi dead-letter.
exchangeExchange tempat pesan dipublikasikan sebelum menjadi dead-letter.
routing-keysRouting key pesan pada saat menjadi dead-letter.
countBerapa kali pesan menjadi dead-letter dari antrian ini karena alasan ini.
timeKapan pesan menjadi dead-letter.

Nilai alasan dead-letter

NilaiPemicu
expiredTTL pesan berakhir.
nackPesan di-negative acknowledge dengan requeue diatur ke false.
rejectPesan ditolak dengan requeue diatur ke false.
Consumption limit exceededPesan gagal setelah 16 kali percobaan ulang.

Aktifkan TTL untuk antrian dead-letter

Secara default, pesan dalam antrian dead-letter tidak kedaluwarsa, meskipun antrian tersebut memiliki TTL yang dikonfigurasi. Aktifkan fitur TTL di tingkat instans agar pesan dead-letter mengikuti pengaturan TTL antrian. Saat TTL pesan dead-letter berakhir, pesan tersebut akan diteruskan ke dead-letter exchange berikutnya yang dikonfigurasi.

Tipe instans yang didukung

Fitur TTL untuk antrian dead-letter tersedia pada tipe instans berikut:

  • Serverless

  • Enterprise Edition (Subscription)

  • Platinum Edition (Subscription)

Prosedur

  1. Pada halaman Instances di Konsol ApsaraMQ for RabbitMQ, klik nama instans target.

  2. Pada halaman Instance Details, klik tab Limits.

  3. Klik Activate di samping TTL Feature Supported.

Penting
  • Hindari membuat loop routing dead-letter. Misalnya, jika antrian dead-letter Antrian A adalah Antrian B dan antrian dead-letter Antrian B adalah Antrian A, pesan akan berputar tanpa henti. Jika ApsaraMQ for RabbitMQ mendeteksi loop semacam ini tanpa event penolakan, sistem secara otomatis menonaktifkan TTL untuk pesan yang terpengaruh guna menghentikan loop tersebut.

  • Pesan dead-letter dapat diarahkan antar-antrian maksimal 16 kali. Setelah mencapai batas ini, TTL dinonaktifkan untuk pesan yang terpengaruh.

Langkah selanjutnya