Producer dan Consumer
Memahami peran producer dan consumer dalam message queue
Producer
- Aplikasi atau service yang mengirim pesan ke queue
- Bertanggung jawab memformat pesan dengan benar
- Tidak perlu tahu siapa yang akan memproses pesan
Tugas Producer
- Membuat pesan dengan format yang konsisten
- Mengirim pesan ke queue atau exchange
- Menangani kegagalan pengiriman pesan
- Menyimpan referensi pesan jika perlu tracking
Contoh Producer
async function kirimPesanan(pesanan) {
const pesan = {
id: pesanan.id,
userId: pesanan.userId,
items: pesanan.items,
total: pesanan.total,
waktu: new Date().toISOString()
};
await queue.send('order_queue', JSON.stringify(pesan));
return { status: 'pending', orderId: pesanan.id };
}Consumer
- Aplikasi atau service yang membaca dan memproses pesan dari queue
- Bisa berjalan sebagai worker terpisah dari aplikasi utama
- Bisa ada banyak instance consumer untuk parallelism
Tugas Consumer
- Membaca pesan dari queue
- Memproses pesan sesuai business logic
- Mengonfirmasi pesan berhasil diproses (acknowledge)
- Menangani error dan retry
Contoh Consumer
async function prosesPesanan() {
const pesan = await queue.receive('order_queue');
try {
const pesanan = JSON.parse(pesan.body);
await prosesPembayaran(pesanan);
await updateStatusPesanan(pesanan.id, 'dibayar');
await queue.acknowledge(pesan);
} catch (error) {
await queue.retry(pesan);
}
}Acknowledge (Ack)
- Signal ke queue bahwa pesan berhasil diproses
- Queue menghapus pesan setelah di-acknowledge
- Tanpa acknowledge, pesan tetap di queue dan bisa diproses ulang
Durability
Durable Queue
- Queue tetap ada meski broker restart
- Pesan tidak hilang saat ada gangguan
- Direkomendasikan untuk data penting
Non-Durable Queue
- Queue hilang saat broker restart
- Pesan bisa hilang
- Cocok untuk data sementara atau real-time
Message Persistence
Persistent Message
- Pesan disimpan ke disk, tidak hilang saat restart
- Lebih lambat tapi lebih aman
- Gunakan untuk pesan yang tidak boleh hilang
Non-Persistent Message
- Pesan hanya di memory
- Lebih cepat tapi hilang saat restart
- Cocok untuk notifikasi real-time
Consumer Group
- Beberapa consumer membaca dari queue yang sama
- Pesan didistribusikan ke consumer yang tersedia
- Load balancing otomatis antar consumer
- Jika satu consumer mati, pesan dialihkan ke consumer lain
Praktik Terbaik
- Producer harus menangani failure saat queue tidak tersedia
- Consumer harus idempoten, aman diproses berulang kali
- Gunakan acknowledge manual untuk memastikan pesan selesai diproses
- Monitor consumer lag untuk deteksi bottleneck
- Scale consumer sesuai dengan jumlah pesan di queue