Routing & Binding #

Dalam lifecycle RabbitMQ, setelah message dipublish, tahap berikutnya adalah:

Routing dan Binding evaluation.

Di sinilah broker menjawab pertanyaan krusial:

  • Ke queue mana pesan ini harus dikirim?
  • Apakah pesan ini punya tujuan?
  • Atau ia harus dibuang?

Tahap ini sepenuhnya terjadi di dalam broker, dan sangat menentukan reliability serta arsitektur sistem.

Artikel ini membahas routing & binding sebagai fase kedua dalam message lifecycle RabbitMQ.

“Sebuah pesan tidak pernah ‘datang begitu saja’ ke queue — ia sampai ke sana karena serangkaian aturan yang secara eksplisit memutuskan nasibnya.”

Posisi Routing dalam Message Lifecycle #

1. Diagram Lifecycle hingga Routing #

Producer
   |
   | publish
   v
Exchange
   |
   | routing & binding evaluation
   v
Queue(s)

Setelah broker menerima message dan memvalidasi exchange, ia akan:

  1. Mengambil semua binding yang terdaftar pada exchange
  2. Mengevaluasi routing key (atau header)
  3. Menentukan queue tujuan

Routing terjadi sebelum message masuk ke queue.


Peran Exchange dalam Routing #

Exchange bertindak sebagai router.

Namun exchange tidak menyimpan aturan secara internal tanpa konteks.

Aturan routing sebenarnya berasal dari:

Binding antara exchange dan queue.

Exchange hanya mengevaluasi binding tersebut.


Binding sebagai Aturan Routing #

Binding adalah relasi yang menghubungkan:

  • Exchange
  • Queue

Binding mendefinisikan kondisi kapan message dikirim ke queue.

Binding biasanya memiliki:

  • Binding key (untuk direct/topic)
  • Header rule (untuk headers exchange)

Tanpa binding, exchange tidak memiliki rute.


Evaluasi Routing Berdasarkan Tipe Exchange #

Routing sangat bergantung pada tipe exchange.


Direct Exchange Routing #

  • Exact match antara routing key dan binding key

Contoh:

routing_key = “payment.success” binding_key = “payment.success”

Jika sama persis → kirim ke queue.

Jika tidak → tidak dirutekan.


Topic Exchange Routing #

  • Pattern match menggunakan wildcard

Wildcard:

  • * → satu kata
  • # → nol atau lebih kata

Contoh:

routing_key = “order.payment.failed” binding_key = “order.#” → match binding_key = “order.*” → tidak match

Topic exchange memungkinkan satu message masuk ke banyak queue.


Fanout Exchange Routing #

  • Mengabaikan routing key
  • Mengirim ke semua queue yang ter-binding

Tidak ada evaluasi kondisi.


Headers Exchange Routing #

  • Mengevaluasi header key-value
  • Menggunakan x-match = all / any

Routing berbasis metadata, bukan string.


Multiple Match dan Duplikasi #

Satu message dapat:

  • Cocok dengan satu binding
  • Cocok dengan beberapa binding
  • Tidak cocok dengan binding mana pun

Jika cocok dengan beberapa binding:

  • Message dikirim ke semua queue tersebut

Setiap queue menerima salinan message.


Unroutable Message #

Jika tidak ada binding yang cocok:

  • Message dibuang (default)
  • Atau dikembalikan ke producer jika mandatory=true

Unroutable message adalah salah satu risiko terbesar dalam desain yang tidak terkontrol.


Routing dalam Cluster dan Quorum Queue #

Routing selalu terjadi di node tempat exchange berada.

Jika queue adalah quorum queue:

  • Setelah routing, message dikirim ke leader
  • Direplikasi ke follower
  • Commit setelah mayoritas setuju

Artinya routing dan replication adalah dua tahap berbeda dalam lifecycle.


Dampak Desain Routing terhadap Arsitektur #

Desain routing menentukan:

  • Seberapa fleksibel sistem berkembang
  • Seberapa mudah menambah subscriber baru
  • Seberapa besar risiko silent drop

Routing yang baik memungkinkan:

  • Producer tetap stabil
  • Subscriber bisa berubah
  • Sistem tetap loosely coupled

Kesalahan Umum #

Tidak Mendokumentasikan Routing Key #

Subscriber baru bisa salah binding.


Overlapping Topic Binding Tanpa Disadari #

Wildcard terlalu luas menyebabkan message masuk ke queue tak terduga.


Tidak Menggunakan Mandatory Flag #

Message hilang tanpa terlihat.


Best Practice Production #

Gunakan Naming Convention Konsisten #

Contoh:

..


Dokumentasikan Kontrak Routing #

Routing key adalah bagian dari API antar service.


Monitor Unroutable Message #

Pantau metric return rate.


Ringkasan #

TahapFungsi
ExchangeRouter
BindingAturan routing
Routing keyParameter publish
MatchingTergantung tipe exchange
UnroutableDibuang atau dikembalikan

Penutup #

Routing dan binding adalah jantung dari fleksibilitas RabbitMQ.

Pada tahap inilah ditentukan apakah pesan:

  • Sampai ke tujuan
  • Disalin ke banyak subscriber
  • Atau hilang tanpa jejak

Dalam message lifecycle, routing bukan sekadar proses teknis — ia adalah keputusan arsitektural yang menentukan bagaimana sistem bereaksi terhadap setiap peristiwa.

Dan seperti semua keputusan arsitektur, ia harus dirancang dengan kesadaran penuh, bukan kebetulan konfigurasi.

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