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-exchange
  • x-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:

  1. Consumer melakukan nack atau reject dengan requeue=false
  2. Message melebihi TTL
  3. Queue melebihi max-length
  4. 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:

  1. Message gagal
  2. Masuk ke retry queue melalui DLX
  3. Retry queue memiliki TTL (misalnya 10 detik)
  4. Setelah TTL, message kembali ke exchange utama
  5. 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 #

KonsepPenjelasan
DLXExchange untuk pesan gagal
DLQQueue penampung dead-letter
TriggerNack, TTL, overflow
ManfaatIsolasi kegagalan
RisikoRetry 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.

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact