Characteristic #
Banyak orang mengenal RabbitMQ dari daftar fiturnya.
Namun dalam sistem production, yang benar-benar penting adalah karakteristik operasionalnya:
- Bagaimana ia menangani beban tinggi?
- Bagaimana ia berperilaku saat terjadi kegagalan?
- Bagaimana ia mengelola state dan message?
Artikel ini membahas karakteristik fundamental RabbitMQ yang harus dipahami sebelum menggunakannya di production.
“Memahami fitur adalah mengetahui apa yang bisa dilakukan sebuah sistem. Memahami karakteristik adalah mengetahui bagaimana sistem itu berperilaku di dunia nyata.”
Message-Oriented Middleware #
RabbitMQ adalah message-oriented middleware (MOM).
Artinya:
- Komunikasi berbasis pesan
- Tidak berbagi memory
- Tidak berbagi database
- Interaksi terjadi melalui message
Karakteristik ini membuat sistem menjadi loosely coupled dan asynchronous secara natural.
Broker-Based Architecture #
RabbitMQ bekerja sebagai broker.
Semua pesan melewati broker.
Implikasinya:
- Centralized routing
- Centralized buffering
- Centralized flow control
1. Diagram Broker-Centric Model #
Producer → RabbitMQ → Consumer
Broker menjadi titik koordinasi komunikasi.
Ini memudahkan observability dan control, tetapi juga menjadikan broker sebagai komponen kritis.
Push-Based Delivery Model #
RabbitMQ menggunakan push-based model.
Artinya:
- Broker mendorong pesan ke consumer
- Bukan consumer yang terus-menerus polling
Keuntungan:
- Latency rendah
- Lebih efisien resource
Namun perlu pengaturan seperti prefetch untuk menghindari overload consumer.
At-Least-Once Delivery (Default Behavior) #
Secara default, RabbitMQ memberikan jaminan:
At-least-once delivery.
Artinya:
- Pesan akan dikirim minimal sekali
- Duplicate message mungkin terjadi
Karena itu consumer harus dirancang idempotent.
RabbitMQ tidak menjamin exactly-once secara native.
FIFO dengan Batasan #
Queue pada RabbitMQ bersifat FIFO secara umum.
Namun ordering hanya benar-benar terjaga jika:
- Single consumer
- Tidak ada requeue
- Tidak ada parallel consumption
Jika banyak consumer membaca paralel, ordering global tidak dijamin.
Ini adalah karakteristik penting dalam desain sistem.
Persistent dan Durable Storage #
RabbitMQ mendukung:
- Durable queue
- Persistent message
Namun penting dipahami:
- Persistence bukan berarti database
- Ia dioptimalkan untuk messaging, bukan long-term storage
RabbitMQ dirancang untuk throughput dan reliability, bukan sebagai event store permanen.
Flow Control dan Backpressure #
RabbitMQ memiliki mekanisme:
- Prefetch
- Memory watermark
- TCP backpressure
Jika consumer lambat:
- Broker bisa menghentikan pengiriman
- Producer bisa dibatasi
Karakteristik ini penting untuk menjaga stabilitas sistem.
Lightweight dan High Throughput #
RabbitMQ dibangun dengan Erlang/OTP.
Karakteristik yang muncul:
- Concurrency tinggi
- Fault tolerance kuat
- Lightweight process model
RabbitMQ cocok untuk:
- Banyak koneksi
- Banyak queue
- Banyak consumer
Namun bukan berarti tak terbatas.
Desain tetap penting.
Horizontal Scaling dengan Cluster #
RabbitMQ mendukung cluster.
Karakteristik cluster RabbitMQ:
- Metadata dibagikan
- Queue bisa direplikasi (quorum queue)
- Node bisa ditambahkan
Namun scaling RabbitMQ berbeda dengan Kafka.
RabbitMQ lebih fokus pada smart routing dan flexible topology.
Operational Sensitivity #
RabbitMQ sensitif terhadap:
- Disk I/O
- Memory pressure
- Network latency
Jika resource terbatas, performa bisa menurun drastis.
Karena itu monitoring sangat penting.
Strong Contract Dependency #
Karena berbasis message:
- Format message menjadi kontrak
- Versioning harus dikelola
- Backward compatibility penting
Karakteristik ini sering diabaikan, tetapi sangat krusial dalam sistem event-driven.
Ringkasan Karakteristik Utama #
| Karakteristik | Implikasi |
|---|---|
| Broker-based | Centralized routing |
| Push model | Latency rendah |
| At-least-once | Harus idempotent |
| FIFO terbatas | Ordering perlu desain |
| Durable option | Bisa persistent |
| Flow control | Stabilitas lebih baik |
| Erlang-based | Concurrency tinggi |
Penutup #
RabbitMQ bukan sekadar alat pengirim pesan.
Ia memiliki karakteristik operasional yang memengaruhi desain sistem secara langsung.
Memahami karakteristik ini berarti:
- Menghindari asumsi keliru
- Mendesain consumer dengan benar
- Mengantisipasi duplicate
- Mengatur flow dengan tepat
Tanpa memahami karakteristiknya, RabbitMQ hanya akan terlihat seperti “queue biasa”.
Padahal ia adalah sistem dengan perilaku yang sangat spesifik di production.