Tutorial RabbitMQ feat. Node JS— Message Broker Untuk Mempersingkat Proses
Hella Kars (Kiddy’s Article Readers)! Loh-loh singkatan macam apa ini?
Pada tutorial kali ini gue mau berbagi tutorial tentang cara menggunakan RabbitMQ dengan NodeJS. Hmm pasti sebelumnya pada bingung, RabbitMQ tuh apaansih?
RabbitMQ is the most widely deployed open source message broker.
RabbitMQ adalah sebuah software open source yang berfungsi sebagai message-broker, atau kalau dalam istilah sehari-hari adalah kurir. Untuk melihat lebih detailnya, silahkan cek gambar dibawah ini.
Nah dari gambar diatas merupakan ilustrasi si kurir yang ditugaskan untuk membuat PDF. Pernah nggak lo lagi masuk ke website mana misalnya, lalu dia akan ngirim invoice? Nah proses pembuatan invoice itu bisa aja manual process atau broker process, manual process adalah process yang terjadi saat user melakukan request. Namun jeleknya adalah manual process ini akan membuat user menunggu proses tersebut, bayangkan kalau misalnya pengguna harus menunggu 10 detik? Lama banget bro!
Nah dengan broker process, kita akan memotong proses yang terjadi dengan nyuruh si kurir yang akan mengerjakan pesan tersebut, kalau diibaratkan kurir ini akan mengirimkan proses kepada sistem sehingga sistem yang akan menerima pesan. Kaya di film spongebob nih.
Si spongebob akan menerima pesan dari si kurir dan mulai mengerjakan tugasnya.
Manfaatnya apa? Tentu saja mempersingkat proses! Yang awalnya pengguna harus menunggu 10 detik untuk terproses maka kita akan langsung memotong proses tersebut dan pengguna akan mendapatkan pesan berhasil lebih cepat, pengguna juga bakalan bilang “Wah cepet banget nih!” padahal mah dibelakang sistemnya lagi kerja hehehe.
Oke yuk sama-sama kita coba belajar, untuk windows silahkan coba kutak-katik sendiri installnya disini atau liat google ya. Untuk Debian/Ubuntu bisa cek disini. Kalau saya sih pake docker jadi udah ready rabbitmq nya.
Kalo udah siap semua barangnya maka kita ready buat project baru, buat folder baru kasih nama latihan-rabbitmq-nodejs. Setelah itu kita masuk ke folder tersebut dan lakukan inisialisasi
cd latihan-rabbitmq-nodejs
npm init
Seperti biasa, enter enter aja biar cepet. Nah kalo udah kita install yang kita butuhkan.
npm install --save amqplib
Kalau udah kita akan ngebuat dua file, yang pertama beri nama producer.js, yang kedua adalah consumer.js. File producer.js ini akan mengirimkan pesan ke si kurir sehingga kita dapat menangkapnya dan memerintahkan sistem untuk melakukan sesuatu. File consumer.js adalah stasiun tempat kurir mengirimkan pesan, sistem akan memproses sesuai code yang kita tulis.
Silahkan copy code untuk consumer.js
const amqp = require('amqplib') // Import library amqp
amqp.connect('amqp://localhost')
.then(conn=> {
return conn.createChannel().then(ch => {
// Deklarasi antrian
const queue1 = ch.assertQueue('queue1', { durable: false })
if(queue1){
queue1.then(() => {
/* Menangkap pesan yang dikirimkan oleh RabbitMQ */
return ch.consume('queue1', msg => console.log('- Received', msg.content.toString()), { noAck: true })
})
.then(() => {
console.log('* Waiting for messages. Ctrl+C to exit')
})
}
// Deklarasi antrian
const queue2 = ch.assertQueue('queue2', { durable: false }) // Deklarasi antrian
if(queue2){
queue2.then(() => {
/* Menangkap pesan yang dikirimkan oleh RabbitMQ */
return ch.consume('queue2', msg => {
let json_data = JSON.parse(msg.content.toString());
console.log(json_data)
console.log(`His name is ${json_data.name}` );
console.log(`His Job is ${json_data.job}`);
}, { noAck: true })
})
.then(() => {
console.log('* Waiting for messages. Ctrl+C to exit')
})
}
})
}).catch(console.warn)
Kalau sudah silahkan paste code untuk producer.js
const amqp = require('amqplib') // Import library amqp
amqp.connect('amqp://localhost')
.then(conn => {
return conn.createChannel().then(ch => {
const msg = 'Hello world!' // Isi pesan yang dikirim ke RabbitMQ
const array = {
name: "Kiddy",
job: "Programmer",
}
// Memanggil kurir 'queue1'
const queue1 = ch.assertQueue('queue1', { durable: false })
// Mengirim pesan ke kurir 'queue1'
ch.sendToQueue('queue1', Buffer.from(msg))
console.log('- Sent', msg)
// Memanggil kurir 'queue2'
const queue2 = ch.assertQueue('queue2', { durable: false })
// Mengirim pesan ke kurir 'queue2'
ch.sendToQueue('queue2', Buffer.from(JSON.stringify(array)))
console.log('- Sent', array)
}).finally(() => {
//Tutup koneksi ke RabbitMQ setelah selesai menggunakan.
setTimeout(function() { conn.close(); }, 500);
})
}).catch(console.warn)
Kita mengirimkan JSON melalui producer.js sebagai alternatif dari array, karena akan sulit mengubah array menjadi Buffer. Saat consumer.js menerima JSON berbentuk string, kita akan memparse-nya menjadi bentuk asli yaitu Array.
Nah sekarang kita harus menjalankan dua command prompt terpisah, yang satu untuk menjalankan consumer.js yang satu untuk menjalankan producer.js
Jika berhasil maka akan berjalan seperti dibawah ini.
Semoga bermanfaat, dan Happy Coding!