Message TTL #

Dalam sistem asynchronous, pesan bisa menumpuk.

Jika consumer lambat atau sistem sedang overload, message dapat berada di queue lebih lama dari yang diharapkan.

Namun tidak semua message tetap relevan setelah waktu tertentu.

Di sinilah Message TTL (Time-To-Live) berperan.

TTL memungkinkan kita menentukan batas waktu hidup sebuah message.

Jika waktu tersebut terlampaui sebelum diproses, message akan dianggap expired.

Artikel ini membahas TTL sebagai bagian penting dalam lifecycle dan strategi reliability RabbitMQ.

“Tidak semua pesan layak diproses selamanya — sebagian hanya relevan dalam jangka waktu tertentu.”

Apa Itu Message TTL? #

Message TTL adalah batas waktu (dalam milidetik) yang menentukan berapa lama message boleh berada di queue sebelum kedaluwarsa.

Jika message melebihi TTL:

  • Message dihapus
  • Atau dikirim ke Dead Letter Exchange (jika dikonfigurasi)

TTL mencegah queue menyimpan message usang tanpa batas.


Cara Mengatur TTL #

TTL bisa diterapkan pada dua level:

1️⃣ TTL di Level Queue #

Dikonfigurasi saat deklarasi queue menggunakan argumen:

x-message-ttl = 60000

Artinya:

  • Semua message dalam queue tersebut memiliki TTL 60 detik

2️⃣ TTL di Level Message #

Producer dapat menentukan expiration per message:

expiration = "60000"

TTL ini hanya berlaku untuk message tersebut.

Jika kedua TTL ada:

  • Yang lebih kecil akan berlaku

Kapan TTL Dihitung? #

TTL dihitung saat message berada dalam queue (fase Queueing).

Jika message belum dikirim ke consumer dan TTL terlampaui:

  • Message dianggap expired
  • Dikeluarkan dari queue

Jika sudah berada dalam status unacked:

  • TTL tidak membatalkan message yang sedang diproses

TTL hanya berlaku selama message berada di ready state.


TTL dan Dead Letter Exchange #

Jika queue memiliki konfigurasi DLX:

  • Message expired tidak langsung dibuang
  • Message dikirim ke DLX

1. Diagram TTL → DLX #

Main Queue
   |
   | TTL expired
   v
Dead Letter Exchange
   |
   v
Dead Letter Queue

Ini sering digunakan untuk membangun retry dengan delay.


TTL sebagai Delay Mechanism (Retry Pattern) #

TTL dapat digunakan untuk membuat delay retry:

  1. Message gagal
  2. Masuk ke retry queue
  3. Retry queue memiliki TTL (misalnya 10 detik)
  4. Setelah TTL, message dead-letter kembali ke exchange utama
  5. Diproses ulang

TTL menjadi mekanisme timer tanpa perlu scheduler eksternal.


TTL dan Ordering #

TTL dapat memengaruhi ordering.

Jika message lebih awal expired sementara message berikutnya masih valid:

  • Message berikutnya bisa diproses lebih dulu

Ordering FIFO tetap berlaku untuk message yang valid.

Namun expired message dihapus dari tengah antrian.


TTL dan Resource Management #

TTL membantu:

  • Mengurangi backlog usang
  • Mengontrol memory usage
  • Menghindari pemrosesan message tidak relevan

Contoh use case:

  • Notifikasi yang hanya valid 30 detik
  • OTP verification
  • Data harga real-time

Risiko TTL #

TTL Terlalu Pendek #

Message bisa expired sebelum sempat diproses.


TTL Terlalu Panjang #

Backlog tetap menumpuk.


TTL Tanpa DLX #

Message expired hilang tanpa jejak.

Monitoring sangat penting.


TTL dalam Quorum Queue #

TTL tetap berlaku dalam quorum queue.

Namun expiration tetap dikelola oleh leader.

Message expired akan di-dead-letter sesuai konfigurasi.

Consensus tetap dijaga.


Best Practice Production #

  • Gunakan TTL untuk message yang time-sensitive
  • Kombinasikan TTL dengan DLX untuk retry pattern
  • Monitor expired message rate
  • Hindari TTL terlalu agresif
  • Dokumentasikan SLA message relevancy

TTL adalah alat kontrol relevansi data.


Ringkasan #

AspekTTL
TujuanBatas waktu hidup message
LevelQueue atau Message
Trigger expiredSaat di queue (ready state)
IntegrasiDLX untuk retry
RisikoExpired terlalu cepat

Penutup #

Message TTL adalah mekanisme sederhana namun sangat kuat dalam RabbitMQ.

Ia memastikan sistem tidak memproses data yang sudah tidak relevan.

Dalam arsitektur asynchronous yang matang, tidak semua pesan harus diproses — sebagian memang harus dibiarkan mati jika waktunya telah lewat.

TTL memberi kita kontrol atas dimensi waktu dalam message lifecycle.

Karena dalam sistem terdistribusi, waktu sering kali sama pentingnya dengan data itu sendiri.

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