Media

RabbitMQ, si message broker alias kantor pos
By Widyanto Gunadi - 5 June 2018
562 Views

Dalam dunia pemrograman, terdapat jenis perangkat lunak bernama message broker. Fungsinya, untuk mengatur pesan yang dikirimkan oleh pengirim agar dapat sampai ke penerima. Seperti dilansir 3pillarglobal.com, message broker biasanya digunakan pada layanan telekomunikasi, perbankan, e-commerce, serta pesan singkat. Ada banyak contoh perangkat lunak jenis ini, antara lain ActiveMQ, Kafka, dan RabbitMQ. Namun, dalam artikel ini, kami akan menggunakan RabbitMQ sebagai contoh.

 

Seperti kantor pos

Agar lebih mudah, Anda dapat menganalogikan RabbitMQ sebagai kantor pos. Ketika Anda mengirim surat, Anda harus memasukkan surat tersebut ke kotak pos untuk diproses di kantor pos, disortir, dan diantarkan oleh tukang pos.

Dalam analogi tersebut, RabbitMQ bertindak sebagai kotak pos, kantor pos, dan tukang pos sekaligus. Misalnya, RabbitMQ menyimpan antrean pesan yang berisi alamat surel dan isi surel. Ketika RabbitMQ mengirim pesan tersebut ke receiver, maka receiver akan mengirim surel dengan tujuan dan isi surel sesuai pesan yang diterima RabbitMQ.

 

Proses penggunaan

Untuk mengetahui proses penggunaan RabbitMQ, mari ikuti langkah-langkah berikut.

 

Instalasi

Untuk instalasi RabbitMQ, Anda bisa mengecek https://www.rabbitmq.com/download.html. Lalu pilih instruksi sesuai dengan platform yang Anda gunakan.

 

Kenali berbagai istilahnya

Sebelum memulai, ada beberapa istilah yang harus kita ketahui pada RabbitMQ.

 

Producing

Producing tidak beda dari mengirim. Program yang mengirimkan pesan disebut dengan producer.

 

Queue

Queue bisa disebut dengan antrean yaitu nama untuk kotak pos yang ada didalam RabbitMQ. Banyak producer bisa mengirim banyak pesan ke satu antrean dan banyak consumer dapat menerima data dari satu antrean.

 

Consuming

Consuming sama saja dengan menerima. Consumer adalah program penunggu penerimaan pesan.

Sebagai catatan producer, consumer, dan broker tidak harus berada pada satu host yang sama.

 

Permulaan

Sebagai permulaan, Anda bisa membuat program sederhana yang akan mengirimkan pesan kepada penerima. Sebelum memulai, pastikan RabbitMQ sudah terpasang dan berjalan. Lalu buat direktori baru dan npm init di dalamnya.

 

Kode

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')

Hubungkan ke RabbitMQ server dan buat channel baru
...
amqp.connect('amqp://localhost').then(conn => conn.createChannel())

Kemudian declare queue, agar Anda bisa mengirimkan pesan.
...
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

const amqp = require('amqplib')     // Import library amqp

amqp.connect('amqp://localhost')
  .then(conn => {
    return conn.createChannel().then(ch => {
      const q = 'hello'     // Nama antrian adalah 'hello'
      const msg = 'Hello world!'    // Isi pesan yang dikirim ke RabbitMQ

      const ok = ch.assertQueue(q, { durable: false })    // Membuat antrian 'hello'
      return ok.then(() => {
        ch.sendToQueue(q, Buffer.from(msg))     // Mengirim pesan ke RabbitMQ
        console.log('- Sent', msg)
        return ch.close()
      })
    }).finally(() => conn.close())
  }).catch(console.warn)

Selanjutnya, buat file baru consumer.js yang akan berperan sebagai consumer. Import 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 => {})
})

Declare nama queue dan buat callback yang akan dieksekusi ketika RabbitMQ mengirim pesan ke consumer. Sebagai catatan, jika nama queue yang dideklarasikan sudah ada, maka broker tidak akan membuat queue baru, melainkan 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

const amqp = require('amqplib')     // Import library amqp

amqp.connect('amqp://localhost')
  .then(conn=> {
    return conn.createChannel().then(ch => {
      const ok = ch.assertQueue('hello', { durable: false })      // Deklarasi antrian
      ok.then(() => {
        /* Menangkap pesan yang dikirimkan oleh RabbitMQ */
        return ch.consume('hello', msg => console.log('- Received', msg.content.toString()), { noAck: true })
      })
      .then(() => {
        console.log('* Waiting for messages. Ctrl+C to exit')
      })
    })
  }).catch(console.warn)

 

Uji coba

Untuk uji coba dari kode yang Anda buat di atas menggunakan terminal, jalankan node producer.js terlebih dahulu. Lalu jalankan consumer untuk menerima pesan Hello world! yang dikirimkan oleh producer node consumer.js

Dapat dilihat, sesaat setelah Anda menjalankan consumer, akan tercetak tulisan, “Received Hello World!” Artinya, 

Dapat kita lihat sesaat setelah kita menjalankan consumer akan tercetak tulisan — Received Hello world! Itu artinya, percobaan Anda menggunakan RabbitMQ pertama kali telah berhasil!

 

Rekomendasi bacaan:
Apa itu machine learning?
Tahukah Anda, 2 merek terbesar dunia berasal dari Tiongkok?
Mengapa voice assistant sering pakai suara perempuan?

 

Sumber:
medium.com
medium.com
3pillarglobal.com
 

Tags:

  • e-commerce
  • layanan pesan
  • coding
  • kode
  • RabbitMQ
  • message broker
  • Share Group 1 Group 3 Group 4
    Bergabung dengan EKRUT

    Bergabung dengan EKRUT dan dapatkan pekerjaan impianmu!
    Daftar Sekarang