Pengenalan Message Queue
Memahami konsep antrian pesan dalam arsitektur aplikasi
Apa itu Message Queue
- Sistem yang menyimpan pesan sementara sampai bisa diproses
- Memungkinkan aplikasi berkomunikasi secara asynchronous
- Producer mengirim pesan, consumer memproses pesan
Mengapa Menggunakan Message Queue
- Decoupling: producer dan consumer tidak perlu aktif bersamaan
- Buffering: menangani lonjakan traffic tanpa overload server
- Scalability: consumer bisa ditambah untuk memproses lebih banyak pesan
- Reliability: pesan tidak hilang meski consumer sementara mati
Komponen Message Queue
Producer (Publisher)
- Aplikasi yang mengirim pesan ke queue
- Tidak perlu menunggu pesan diproses
- Bisa langsung merespons user setelah pesan dikirim
Queue (Broker)
- Tempat penyimpanan pesan sementara
- Menjaga urutan pesan dan mengirim ke consumer
- Contoh: RabbitMQ, Kafka, Redis Pub/Sub, AWS SQS
Consumer (Subscriber)
- Aplikasi yang membaca dan memproses pesan dari queue
- Bisa ada banyak consumer untuk satu queue
- Pesan dihapus dari queue setelah berhasil diproses
Jenis Message Queue
Point-to-Point
- Satu pesan hanya diproses oleh satu consumer
- Setelah diproses, pesan dihapus dari queue
- Cocok untuk task yang hanya perlu dilakukan sekali
Publish-Subscribe (Pub/Sub)
- Satu pesan bisa diterima oleh banyak consumer
- Pesan tidak dihapus sampai semua subscriber menerima
- Cocok untuk notifikasi dan event broadcasting
Perbedaan Message Queue dan API Synchronous
API Synchronous
- Client menunggu server selesai memproses
- Server harus selesai sebelum bisa merespons request lain
- User menunggu di layar sampai proses selesai
Message Queue
- Client mengirim pesan dan tidak perlu menunggu
- Server memproses di background
- User bisa melanjutkan aktivitas lain
Message Queue Populer
- RabbitMQ: open source, protokol AMQP, fitur lengkap
- Apache Kafka: high throughput, distributed, durable
- Redis Pub/Sub: ringan, in-memory, cepat
- AWS SQS: managed service dari Amazon
- Google Cloud Pub/Sub: managed service dari Google
Praktik Terbaik
- Pesan harus idempoten, aman diproses ulang
- Beri timeout pada pesan yang tidak diproses lama
- Monitor queue depth untuk deteksi bottleneck
- Retry dengan exponential backoff saat consumer gagal
- Dead letter queue untuk pesan yang gagal berulang kali