Menggunakan Rabbit MQ Di Node JS Untuk Pemula
Saat sebelum kita bicara tentang RabbitMQ. Mari kita sedikit mengulas mengenai Message Broker. Apakah itu Message Broker? Message Broker ialah program mediator yang atur pesan yang dikirim oleh pengirim (sender/producer/penerbit/publisher) ke penerima (receiver/consumer/subscriber).
Kapan dan mengapa kita harus menerapkan Messaging Queue? Saat kita ingin membuat sistem yang scalable. Contoh sistem kita sebuah e-commerce yang mempunyai feature kirim sms/e-mail pernyataan sesudah user order satu barang, karena itu proses itu dapat mengirit waktu tanggapan ke pemakai tanpa harus menanti selesainya kirim sms/e-mail. Cukup kita kirimkan pesan pekerjaan kirim e-mail ke antrean pesan di message broker, karena itu oleh message broker akan mengirimkan ke receiver, dan receiver yang hendak lakukan pekerjaan kirim e-mail. Hal itu dikerjakan secara latar belakang tanpa harus menunggu selesai lebih dulu dan untuk receivernya dapat ada beberapa . Maka pemakaian MQ ini pas jika kita ingin membuat sistem yang scalable. Dan yang diartikan scalable di sini adalah kekuatan untuk jaga kinerja dan performa sistem masih tetap bagus meskipun jumlah data yang disimpan makin bertambah dan jumlah usernya makin bertambah juga.
RabbitMQ merupakan salah satu dari beberapa Message Broker. Dapat kita analogikan sebagai kantor pos. Saat kita ingin mengirim surat, kita memasukkan surat itu di dalam kotak pos. Dari kotak pos surat akan diolah lebih dahulu di kantor pos untuk difilter dan disortir sesuai daerah atau wilayah yang menerima surat. Dan seterusnya pihak kantor pos akan menugaskan tukang pos untuk mengirimkan surat itu ke penerima. Nach dalam analogi ini, RabbitMQ ialah kotak pos, kantor pos, dan tukang pos. Yang bekerja menerima pesan, atur pesan untuk dikirim ke mana, sekalian mengirimkannya ke yang menerima. Dan biasanya pesan di RabbitMQ yang dikirim ke receiver dipakai untuk memacu satu tugas yang hendak dikerjakan oleh receiver. Contoh RabbitMQ simpan antrian pesan yang berisi alamat e-mail dan isi e-mail. Saat RabbitMQ mengirim pesan itu ke receiver, karena itu receiver akan mengirimi e-mail dengan arah dan isi e-mail sesuai pesan yang diterima dari RabbitMQ.
Instalasi
Untuk instalasi RabbitMQ dapat kita lihat di sini https://www.rabbitmq.com/download.html lalu tentukan instruksi sesuai platform yang kita pakai.
Istilah
Sebelum memulai, ada banyak istilah yang perlu kita ketahui pada RabbitMQ.
Producing. Producing sama dengan mengirim. Program yang mengirimkan pesan disebutkan dengan producer.
Queue. Queue dapat dimaksud dengan antrian yakni nama untuk kotak pos yang ada di dalam RabbitMQ. Banyak producer dapat mengirim banyak pesan ke satu antrean. Dan banyak consumer bisa menerima data dari 1 antrian.
Consuming. Consuming sama dengan menerima. Consumer ialah program yang menunggu untuk menerima pesan.
Sebagai catatan producer, consumer, dan broker tidak harus ada pada satu host yang serupa.
Permulaan
Sebagai permulaan kita akan membuat program simpel yang akan menyampaikan pesan ke penerima. Sebelum memulai, pastikan RabbitMQ telah terinstall dan telah jalan.Lalu buat direktori baru dan npm init di dalamnya.
Code
Install amqp.node dengan npm install amqplib
lalu buat file baru producer.js
yang nantinya akan berperan sebagai producer.
Import package amqp.node tadi
const amqp = require('amqplib')
Sambungkan ke RabbitMQ server dan buat channel baru
...
amqp.connect('amqp://localhost').then(conn => conn.createChannel())
Mendeklarasikan queue hingga kita bisa menyampaikan pesan ke queue itu.
...
conn.createChannel().then(ch => {
const q = 'hello'
const msg = 'Hello world!'
const ok = ch.assertQueue(q, { durable: false })
ok.then(() => {
ch.sendToQueue(q, Buffer.from(msg))
console.log('- Sent', msg)
return ch.close()
})
})
...
Kode lengkap producer.js
Setelah itu membuat file baru consumer.js yang akan berperan sebagai consumer. Impor amqp.node lalu hubungkan ke RabbitMQ server dan buat channel baru.
const amqp = require('amqplib')amqp.connect('amqp://localhost').then(conn=> {
return conn.createChannel().then(ch => {})
})
Mendeklarasikan nama queue dan membuat callback yang akan dilakukan saat RabbitMQ mengirim pesan ke consumer. Sebagai catatan, bila nama queue yang dideklarasikan sudah ada, karena itu broker tidak membuat queue baru tapi menggunakan queue yang sudah ada.
conn.createChannel().then(ch => {
const ok = ch.assertQueue('hello', { durable: false })
ok.then(() => {
return ch.consume('hello', msg => console.log('- Received', msg.content.toString()), { noAck: true })
})
Kode lengkap consumer.js
Uji Coba
Untuk uji coba dari code yang kita buat di atas menggunakan terminal dan kita lakukan producer lebih dahulu node producer.js
Lalu kita lakukan consumer untuk menerima pesan Hello world!
yang dikirimkan oleh producer node consumer.js
Bisa kita lihat sesaat sesudah kita menjalankan consumer akan tercetak tulisan — Received Hello world!
Sampai disini artikel berkenalan dengan RabbitMQ dari saya. Sebenarnya ada banyak lagi sejumlah fitur dari RabbitMQ. Mungkin ada peluang dapat saya lanjut di artikel selanjutnya. Sampai jumpa dan mudah-mudahan artikel ini bermanfaat.