Routing Key #

Dalam RabbitMQ, producer tidak pernah mengirim pesan langsung ke queue.

Producer mengirim pesan ke exchange.

Namun agar exchange tahu ke mana pesan harus diarahkan, diperlukan satu elemen penting:

Routing key.

Routing key adalah string yang menjadi parameter utama dalam proses routing.

Kesalahan dalam mendesain routing key sering kali menyebabkan:

  • Message salah tujuan
  • Silent drop
  • Coupling yang tidak disadari
  • Sulitnya evolusi sistem

Artikel ini membahas routing key secara mendalam dalam konteks desain RabbitMQ production.

“Sebuah pesan tanpa routing key yang tepat seperti surat tanpa alamat — ia mungkin dikirim, tetapi belum tentu sampai.”

Apa Itu Routing Key? #

Routing key adalah string yang dikirim bersama message saat producer melakukan publish ke exchange.

Contoh:

  • order.created
  • payment.success
  • user.registered

Routing key dievaluasi oleh exchange berdasarkan tipe exchange dan binding yang terdaftar.

Routing key bukan metadata opsional.

Ia adalah bagian inti dari mekanisme routing.


Di Mana Routing Key Digunakan? #

Routing key berperan pada:

  • Direct exchange
  • Topic exchange

Pada fanout exchange, routing key diabaikan.

Pada headers exchange, routing key tidak digunakan untuk matching utama.


Routing Key pada Direct Exchange #

Pada direct exchange, routing key harus cocok secara persis dengan binding key.

1. Diagram Exact Match #

Producer
  routing_key = "order.created"
          |
          v
      Direct Exchange
          |
 binding_key = "order.created"
          |
          v
        Queue

Jika tidak exact match → message tidak dikirim.

Direct exchange cocok untuk:

  • Command routing
  • Task queue spesifik

Routing Key pada Topic Exchange #

Topic exchange menggunakan pola pencocokan berbasis wildcard.

Wildcard yang tersedia:

    • → satu kata
  • → nol atau lebih kata #

Contoh routing key:

order.created order.cancelled order.payment.failed

Contoh binding key:

  • order.*
  • order.#
  • *.created

2. Diagram Pattern Matching #

routing_key = "order.payment.failed"

binding_key = "order.#"   → match
binding_key = "order.*"   → tidak match
binding_key = "#.failed"  → match

Topic exchange memberikan fleksibilitas tinggi untuk event-driven architecture.


Struktur Routing Key yang Baik #

Routing key sebaiknya mengikuti pola terstruktur.

Contoh konvensi umum:

..

Contoh:

order.payment.completed user.profile.updated inventory.stock.decreased

Struktur ini memudahkan:

  • Pattern matching
  • Ekspansi sistem
  • Observability

Routing Key sebagai Bagian dari Kontrak #

Dalam sistem event-driven:

  • Routing key adalah bagian dari kontrak komunikasi
  • Perubahan routing key dapat memengaruhi banyak consumer

Jika routing key diubah sembarangan:

  • Consumer bisa berhenti menerima message
  • Event tidak terproses

Versioning event sering dilakukan dengan:

order.created.v2

Atau menggunakan header version.


Kesalahan Umum dalam Desain Routing Key #

Terlalu Spesifik #

routing_key = “order.created.us.region.east.production”

Sulit dikelola dan tidak fleksibel.


Terlalu Umum #

routing_key = “event”

Tidak memberikan granularitas untuk routing.


Tidak Konsisten #

order.created orderCreate ORDER_CREATED

Inkonsistensi membuat sistem sulit dipahami dan di-maintain.


Routing Key dan Evolusi Sistem #

Salah satu kekuatan RabbitMQ adalah kemampuan menambahkan consumer baru tanpa mengubah producer.

Ini hanya mungkin jika routing key dirancang dengan baik.

Contoh:

Producer publish:

order.created

Awalnya hanya Payment Service yang subscribe.

Kemudian ditambahkan:

  • Notification Service
  • Analytics Service

Producer tidak perlu diubah.

Ini karena routing key sudah cukup generik dan bermakna.


Routing Key vs Queue Name #

Routing key bukan queue name.

Walaupun pada default exchange keduanya bisa sama, secara arsitektural:

  • Routing key adalah parameter routing
  • Queue name adalah entitas penyimpanan

Menyamakan keduanya secara eksplisit bisa menciptakan coupling yang tidak perlu.


Ringkasan #

KonsepPenjelasan
Routing keyString penentu arah pesan
Direct exchangeExact match
Topic exchangePattern match dengan wildcard
StrukturDomain.Entity.Action
Best practiceKonsisten dan terstruktur

Penutup #

Routing key adalah alamat logis dalam sistem messaging RabbitMQ.

Ia menentukan:

  • Siapa yang menerima message
  • Seberapa fleksibel sistem berkembang
  • Seberapa mudah sistem dipelihara

Desain routing key yang baik adalah investasi jangka panjang dalam arsitektur event-driven.

Karena dalam sistem asynchronous, satu string kecil dapat menentukan arah seluruh aliran data.

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