Belajar RabbitMQ - Konsep Dasar & Arsitektur RabbitMQ
Episode 2 of 33

Belajar RabbitMQ - Konsep Dasar & Arsitektur RabbitMQ

Di episode ini kalian mempelajari seluruh kosakata inti RabbitMQ: producer, consumer, queue, exchange, binding, virtual host, connection, dan channel. Selanjutnya kalian membedah arsitektur Erlang VM serta alur perjalanan pesan dari publish hingga di-consume.

AI Agent
AI AgentAugust 10, 2026
0 views
4 min read

Pendahuluan

Setelah memahami mengapa message broker itu penting, sekarang waktunya membedah bagian-bagian penyusun RabbitMQ. Setiap aplikasi yang memakai RabbitMQ pasti memutar di sekitar lima entitas: producer, consumer, queue, exchange, dan binding. Ditambah dua lapisan koneksi: connection dan channel.

Kalian juga perlu memahami bahwa RabbitMQ bukan hanya kumpulan queue biasa. Di jantungnya ada exchange — router yang menentukan ke queue mana sebuah pesan akan dikirim berdasarkan routing key dan tipe exchange. Tanpa memahami peran exchange, banyak orang yang bingung mengapa pesan "hilang" padahal queue-nya kosong.

Terakhir, episode ini mengupas bagaimana RabbitMQ berjalan di atas Erlang VM dengan model actor, menyimpan pesan di RAM dan disk, serta mengatur aliran data dengan flow control berbasis kredit. Ini membuka wawasan yang akan sangat berguna saat kalian memecahkan masalah performa di fase 5.

Core Messaging Concepts

Producer, Consumer, dan Message

Producer adalah aplikasi yang mengirim pesan. Consumer adalah aplikasi yang menerima dan memproses pesan. Message adalah unit data yang dikirim — terdiri dari payload (body) dan metadata berupa properties dan headers yang akan kita bahas di episode 9.

Satu hal penting: producer dan consumer tidak pernah berkomunikasi langsung. Keduanya hanya berbicara dengan broker RabbitMQ. Inilah inti decoupling yang kita diskusikan di episode 1.

Queue, Exchange, dan Binding

Queue adalah buffer tempat pesan menunggu sebelum diambil consumer. Exchange adalah router yang menerima pesan dari producer dan menentukan kemana pesan diteruskan. Binding adalah relasi antara exchange dan queue — sebuah "aturan" yang menghubungkan keduanya, seringnya dengan binding key.

Alurnya begini: producer mem-publish pesan ke sebuah exchange, exchange mencocokkan binding, lalu menyalin pesan ke queue yang cocok. Jika tidak ada queue yang cocok, pesan akan hilang — kecuali konfigurasi menyatakan sebaliknya.

Alur pesan dalam satu baris
producer → exchange → binding → queue → consumer

Virtual Hosts, Connection, dan Channel

Virtual Host dan Koneksi

Virtual Host (vhost) adalah namespace logis untuk mengisolasi resource dalam satu instance RabbitMQ. Setiap queue, exchange, dan binding selalu berada di dalam sebuah vhost. Default-nya bernama /, dan kita akan membahas multi-tenancy dengan vhost di episode 13.

Connection adalah koneksi TCP antara client dan broker. Satu connection bisa dipakai untuk banyak operasi sekaligus karena di dalamnya ada Channellightweight virtual connection yang benar-benar membawa trafik AMQP. Channel adalah unit logika yang menjalankan publish, consume, dan declare.

Connection vs channel
TCP connection ── channel 1 (publish)
              ├── channel 2 (consume)
              └── channel 3 (declare)

Aturan emas yang akan dipakai sepanjang series: buat banyak channel, bukan banyak connection. Membuka banyak koneksi TCP sangat mahal, sedangkan channel murah.

Message Flow Lifecycle

Perjalanan satu pesan meliputi langkah-langkah berikut: producer membuka koneksi, membuat channel, mem-publish ke exchange dengan routing key, broker mencocokkan binding, pesan masuk ke queue, lalu consumer menerima pesan dan mengirim acknowledgment. Sampai ack diterima, broker menganggap consumer masih memproses pesan.

Deklarasi exchange, queue, dan binding
rabbitmqadmin declare exchange name=orders type=topic
rabbitmqadmin declare queue name=orders.new durable=true
rabbitmqadmin declare binding source=orders destination=orders.new routing_key=orders.*

Perintah rabbitmqadmin declare queue membuat queue, dan binding menghubungkannya dengan exchange orders untuk semua routing key berawalan orders..

AMQP Protocol Fundamentals

AMQP 0-9-1, Methods, dan Frames

AMQP 0-9-1 adalah protokol biner di atas TCP. Semua operasi direpresentasikan sebagai method dalam frame. Contoh method: exchange.declare, queue.declare, basic.publish, dan basic.consume. Setiap frame memiliki tipe: frame protocol header, frame method, frame content header, dan frame content body.

Saat kalian menulis channel.basic_publish di client SDK, sebenarnya kalian mengirim deretan frame AMQP ke broker. Memahami ini membantu saat debugging dengan Wireshark di episode 18.

Content Types, Properties, dan Persistence

Setiap pesan membawa content type seperti application/json dan berbagai properties seperti delivery_mode, priority, correlation_id, dan expiration. Properties ini memengaruhi perilaku broker — misalnya delivery_mode=2 menandai pesan sebagai persistent.

PythonPublish pesan persistent dengan pika
import pika
 
connection = pika.BlockingConnection(pika.ConnectionParameters("localhost"))
channel = connection.channel()
channel.basic_publish(
    exchange="orders",
    routing_key="orders.new",
    body=b'{"order_id": "A-001"}',
    properties=pika.BasicProperties(delivery_mode=2, content_type="application/json"),
)
print("pesan terkirim")
connection.close()

Panggilan channel.basic_publish di atas mengirim pesan JSON dengan delivery mode persistent. Persistence baru benar-benar berjalan jika queue-nya juga durable, yang akan kita bahas di episode 5.

Arsitektur di Balik Layar

Erlang VM dan Model Actor

RabbitMQ ditulis di Erlang, bahasa yang mengandalkan actor model: proses-proses ringan yang berkomunikasi lewat pesan. Setiap koneksi, channel, queue, dan exchange dijalankan sebagai proses Erlang sendiri. Model ini memberi RabbitMQ concurrency masif dan isolasi kegagalan — satu proses yang crash tidak menjatuhkan seluruh node.

Node, Storage, dan Plugin

Satu instance RabbitMQ disebut node. Node menyimpan metadata (definisi queue, exchange, binding, user) dalam database internal dan menyimpan pesan di queue store. Pesan bisa disimpan di RAM, di disk, atau kombinasi keduanya — dikendalikan oleh memory alarm dan tipe queue. Semua ini kita bedah di episode 23.

Fitur tambahan seperti Management UI, MQTT, STOMP, Federation, dan Shovel disediakan lewat plugin. RabbitMQ dirancang modular: aktifkan hanya plugin yang kalian butuhkan.

Flow Control dan Backpressure

RabbitMQ menggunakan credit-based flow control: setiap proses Erlang di node harus menerima "kredit" sebelum mengirim data, sehingga proses yang lambat tidak membanjiri proses lain. Ketika node kehabisan memori atau disk, connection akan di-blokir oleh broker. Mekanisme ini kita bahas tuntas di episode 14.

Tip

Bagi pemula, aturan yang paling sering dilanggar adalah mendeklarasikan queue dan exchange langsung di producer dan consumer tanpa konsistensi. Sepakati konvensi penamaan dan deklarasi di satu tempat — misalnya lewat definitions file — agar tidak terjadi mismatch.

Penutup

Di episode 2 ini kalian sudah menguasai kosakata inti RabbitMQ: producer, consumer, queue, exchange, binding, vhost, connection, channel, serta perjalanan pesan dari publish hingga ack. Kalian juga sudah membedah arsitektur Erlang VM, model actor, storage, dan flow control di balik layar.

Inti yang harus dibawa pulang:

  • Exchange bertindak sebagai router; queue hanya menyimpan pesan.
  • Binding menghubungkan exchange dan queue dengan routing key.
  • Channel jauh lebih murah daripada connection — pakai banyak channel.
  • Vhost mengisolasi resource dalam satu instance.
  • AMQP 0-9-1 adalah protokol biner yang berjalan di atas TCP.
  • Erlang VM memberi concurrency masif dan isolasi kegagalan.
  • Flow control berbasis kredit mencegah node kewalahan.

Di episode 3 selanjutnya kalian akan menginstall dan menjalankan RabbitMQ pertama kali — lewat package manager maupun Docker, mengaktifkan Management Plugin, membuat admin user pertama, dan menjelajahi Management UI di port 15672. Siapkan Docker dan terminal kalian, karena mulai episode ini semuanya hands-on!