Dead Letter Exchange (DLX) #
Dalam RabbitMQ, tidak semua pesan bisa atau harus diproses dengan sukses.
Sebagian pesan:
- Gagal berkali-kali
- Expired karena TTL
- Melebihi batas panjang queue
- Ditolak oleh consumer
Jika pesan-pesan ini tetap berada di queue utama, sistem bisa macet.
Di sinilah Dead Letter Exchange (DLX) berperan.
DLX memungkinkan pesan yang gagal diproses dialihkan ke jalur terpisah tanpa mengganggu alur utama.
Artikel ini membahas DLX secara mendalam sebagai bagian dari strategi reliability dalam RabbitMQ.
“Sistem yang matang tidak menghindari kegagalan — ia mengisolasinya agar tidak menyebar.”
Apa Itu Dead Letter Exchange? #
Dead Letter Exchange adalah exchange khusus yang menerima pesan yang “ditolak” atau “tidak valid lagi” dari queue asal.
Queue dapat dikonfigurasi dengan parameter:
x-dead-letter-exchangex-dead-letter-routing-key(opsional)
Ketika kondisi tertentu terjadi, message tidak dihapus begitu saja.
Ia dikirim ke DLX.
Kapan Message Masuk ke DLX? #
Message akan menjadi dead-letter jika:
- Consumer melakukan
nackataurejectdenganrequeue=false - Message melebihi TTL
- Queue melebihi
max-length - Queue melebihi
max-length-bytes
DLX adalah mekanisme sentral untuk menangani semua kondisi ini.
Alur Dead Lettering #
1. Diagram Dead Letter Flow #
Main Queue
|
| nack / TTL / overflow
v
Dead Letter Exchange
|
v
Dead Letter Queue (DLQ)
Message dipindahkan dari queue utama ke DLQ melalui exchange DLX.
Mengapa DLX Penting? #
Tanpa DLX:
- Message gagal bisa hilang permanen
- Atau terus di-requeue tanpa batas
- Sulit melakukan observability
Dengan DLX:
- Pesan bermasalah diisolasi
- Dapat dianalisis
- Dapat diproses ulang secara manual atau otomatis
DLX membuat sistem lebih resilien.
DLQ (Dead Letter Queue) #
DLX hanyalah exchange.
Biasanya kita membuat queue khusus untuk menampung pesan dead-letter, yang disebut DLQ.
DLQ memungkinkan:
- Monitoring jumlah kegagalan
- Logging error
- Investigasi manual
- Reprocessing terkontrol
DLQ bukan tempat sampah tanpa pengawasan.
Ia adalah alat observability.
Retry Pattern dengan DLX #
DLX sering digunakan untuk membangun retry mechanism.
Contoh pola umum:
- Message gagal
- Masuk ke retry queue melalui DLX
- Retry queue memiliki TTL (misalnya 10 detik)
- Setelah TTL, message kembali ke exchange utama
- Diproses ulang
Dengan tambahan header seperti retry-count, kita bisa membatasi jumlah percobaan.
DLX memungkinkan retry dengan delay tanpa blocking queue utama.
DLX dan Ordering #
Dead-lettering dapat memengaruhi ordering.
Karena message yang gagal dipindahkan keluar dari queue utama.
Jika kemudian di-reprocess, urutan bisa berubah.
Jika ordering kritikal, desain DLX harus sangat hati-hati.
DLX dalam Quorum Queue #
Pada quorum queue:
- Dead-lettering tetap mengikuti log consensus
- Konsistensi tetap dijaga
- Message yang di-dead-letter tetap tercatat secara konsisten
DLX tidak mengurangi reliability quorum.
Risiko dan Kesalahan Umum #
Tidak Memiliki DLQ untuk Queue Kritis #
Message gagal bisa hilang tanpa jejak.
DLQ Tidak Dimonitor #
DLQ penuh tetapi tidak ada yang menyadari.
Retry Tanpa Batas #
DLX digunakan untuk retry tetapi tanpa pembatasan.
Bisa menyebabkan loop tak berujung.
Best Practice Production #
- Selalu gunakan DLX untuk queue bisnis penting
- Monitor DLQ depth dan rate
- Pisahkan DLQ per domain jika perlu
- Batasi retry dengan header counter
- Jangan jadikan DLQ sebagai storage permanen
DLX harus menjadi bagian eksplisit dari desain sistem.
Ringkasan #
| Konsep | Penjelasan |
|---|---|
| DLX | Exchange untuk pesan gagal |
| DLQ | Queue penampung dead-letter |
| Trigger | Nack, TTL, overflow |
| Manfaat | Isolasi kegagalan |
| Risiko | Retry tak terkendali |
Penutup #
Dead Letter Exchange adalah mekanisme isolasi kegagalan dalam RabbitMQ.
Ia memastikan bahwa pesan bermasalah tidak merusak alur utama sistem.
Namun DLX bukan solusi otomatis.
Ia harus disertai dengan:
- Monitoring
- Retry policy yang jelas
- Analisis root cause
Dalam arsitektur messaging yang matang, DLX bukan sekadar fitur tambahan.
Ia adalah jaring pengaman yang memastikan kegagalan tidak berkembang menjadi krisis sistemik.