{"id":271,"date":"2022-04-16T06:48:52","date_gmt":"2022-04-16T06:48:52","guid":{"rendered":"https:\/\/sentraldigitalindonesia.co.id\/blog\/2022\/04\/16\/rabbitmq-si-message-broker-alias-kantor-pos\/"},"modified":"2022-04-16T06:48:52","modified_gmt":"2022-04-16T06:48:52","slug":"rabbitmq-si-message-broker-alias-kantor-pos","status":"publish","type":"post","link":"https:\/\/sentraldigitalindonesia.co.id\/blog\/2022\/04\/16\/rabbitmq-si-message-broker-alias-kantor-pos\/","title":{"rendered":"RabbitMQ, si message broker alias kantor pos"},"content":{"rendered":"<div>\n<p>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.<\/p>\n<h2><strong>Seperti kantor pos<\/strong><\/h2>\n<p>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.<\/p>\n<p>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.<\/p>\n<h2><strong>Proses penggunaan<\/strong><\/h2>\n<p>Untuk mengetahui proses penggunaan RabbitMQ, mari ikuti langkah-langkah berikut.<\/p>\n<h3><strong>Instalasi<\/strong><\/h3>\n<p>Untuk instalasi RabbitMQ, Anda bisa mengecek https:\/\/www.rabbitmq.com\/download.html. Lalu pilih instruksi sesuai dengan platform yang Anda gunakan.<\/p>\n<h3><strong>Kenali berbagai istilahnya<\/strong><\/h3>\n<p>Sebelum memulai, ada beberapa istilah yang harus kita ketahui pada RabbitMQ.<\/p>\n<h3><strong>Producing<\/strong><\/h3>\n<p>Producing tidak beda dari mengirim. Program yang mengirimkan pesan disebut dengan producer.<\/p>\n<h3><strong>Queue<\/strong><\/h3>\n<p>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.<\/p>\n<h3><strong>Consuming<\/strong><\/h3>\n<p>Consuming sama saja dengan menerima. Consumer adalah program penunggu penerimaan pesan.<\/p>\n<p>Sebagai catatan producer, consumer, dan broker tidak harus berada pada satu host yang sama.<\/p>\n<h2><strong>Permulaan<\/strong><\/h2>\n<p>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.<\/p>\n<h2><strong>Kode<\/strong><\/h2>\n<p>Install amqp.node dengan npm install amqplib lalu buat file baru producer.js yang nantinya akan berperan sebagai producer.<br \/><\/br><br \/>\nImport package amqp.node tadi<br \/><\/br><br \/>\nconst amqp = require(&#8216;amqplib&#8217;)<\/p>\n<p>Hubungkan ke RabbitMQ server dan buat channel baru<br \/><\/br><br \/>\n&#8230;<br \/><\/br><br \/>\namqp.connect(&#8216;amqp:\/\/localhost&#8217;).then(conn => conn.createChannel())<\/p>\n<p>Kemudian declare queue, agar Anda bisa mengirimkan pesan.<br \/><\/br><br \/>\n&#8230;<br \/><\/br><br \/>\nconn.createChannel().then(ch => {<br \/><\/br><br \/>\n\u00a0 const q = &#8216;hello&#8217;<br \/><\/br><br \/>\n\u00a0 const msg = &#8216;Hello world!&#8217;<br \/><\/br><br \/>\n\u00a0 const ok = ch.assertQueue(q, { durable: false })<br \/><\/br><br \/>\n\u00a0 ok.then(() => {<br \/><\/br><br \/>\n\u00a0 \u00a0 ch.sendToQueue(q, Buffer.from(msg))<br \/><\/br><br \/>\n\u00a0 \u00a0 console.log(&#8216;- Sent&#8217;, msg)<br \/><\/br><br \/>\n\u00a0 \u00a0 return ch.close()<br \/><\/br><br \/>\n\u00a0 })<br \/><\/br><br \/>\n})<br \/><\/br><br \/>\n&#8230;<\/p>\n<p>Kode lengkap producer.js<\/p>\n<p>const amqp = require(&#8216;amqplib&#8217;) \u00a0 \u00a0 \/\/ Import library amqp<\/p>\n<p>amqp.connect(&#8216;amqp:\/\/localhost&#8217;)<br \/><\/br><br \/>\n\u00a0 .then(conn => {<br \/><\/br><br \/>\n\u00a0 \u00a0 return conn.createChannel().then(ch => {<br \/><\/br><br \/>\n\u00a0 \u00a0 \u00a0 const q = &#8216;hello&#8217; \u00a0 \u00a0 \/\/ Nama antrian adalah &#8216;hello&#8217;<br \/><\/br><br \/>\n\u00a0 \u00a0 \u00a0 const msg = &#8216;Hello world!&#8217; \u00a0 \u00a0\/\/ Isi pesan yang dikirim ke RabbitMQ<\/p>\n<p>\u00a0 \u00a0 \u00a0 const ok = ch.assertQueue(q, { durable: false }) \u00a0 \u00a0\/\/ Membuat antrian &#8216;hello&#8217;<br \/><\/br><br \/>\n\u00a0 \u00a0 \u00a0 return ok.then(() => {<br \/><\/br><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 ch.sendToQueue(q, Buffer.from(msg)) \u00a0 \u00a0 \/\/ Mengirim pesan ke RabbitMQ<br \/><\/br><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 console.log(&#8216;- Sent&#8217;, msg)<br \/><\/br><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 return ch.close()<br \/><\/br><br \/>\n\u00a0 \u00a0 \u00a0 })<br \/><\/br><br \/>\n\u00a0 \u00a0 }).finally(() => conn.close())<br \/><\/br><br \/>\n\u00a0 }).catch(console.warn)<\/p>\n<p>Selanjutnya, buat file baru consumer.js yang akan berperan sebagai consumer. Import amqp.node lalu hubungkan ke RabbitMQ server dan buat channel baru.<\/p>\n<p>const amqp = require(&#8216;amqplib&#8217;)<br \/><\/br><br \/>\namqp.connect(&#8216;amqp:\/\/localhost&#8217;).then(conn=> {<br \/><\/br><br \/>\n\u00a0 return conn.createChannel().then(ch => {})<br \/><\/br><br \/>\n})<\/p>\n<p>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.<\/p>\n<p>conn.createChannel().then(ch => {<br \/><\/br><br \/>\n\u00a0 const ok = ch.assertQueue(&#8216;hello&#8217;, { durable: false })<br \/><\/br><br \/>\n\u00a0 ok.then(() => {<br \/><\/br><br \/>\n\u00a0 \u00a0 return ch.consume(&#8216;hello&#8217;, msg => console.log(&#8216;- Received&#8217;, msg.content.toString()), { noAck: true })<br \/><\/br><br \/>\n})<\/p>\n<p>Kode lengkap consumer.js<\/p>\n<p>const amqp = require(&#8216;amqplib&#8217;) \u00a0 \u00a0 \/\/ Import library amqp<\/p>\n<p>amqp.connect(&#8216;amqp:\/\/localhost&#8217;)<br \/><\/br><br \/>\n\u00a0 .then(conn=> {<br \/><\/br><br \/>\n\u00a0 \u00a0 return conn.createChannel().then(ch => {<br \/><\/br><br \/>\n\u00a0 \u00a0 \u00a0 const ok = ch.assertQueue(&#8216;hello&#8217;, { durable: false }) \u00a0 \u00a0 \u00a0\/\/ Deklarasi antrian<br \/><\/br><br \/>\n\u00a0 \u00a0 \u00a0 ok.then(() => {<br \/><\/br><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \/* Menangkap pesan yang dikirimkan oleh RabbitMQ *\/<br \/><\/br><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 return ch.consume(&#8216;hello&#8217;, msg => console.log(&#8216;- Received&#8217;, msg.content.toString()), { noAck: true })<br \/><\/br><br \/>\n\u00a0 \u00a0 \u00a0 })<br \/><\/br><br \/>\n\u00a0 \u00a0 \u00a0 .then(() => {<br \/><\/br><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 console.log(&#8216;* Waiting for messages. Ctrl+C to exit&#8217;)<br \/><\/br><br \/>\n\u00a0 \u00a0 \u00a0 })<br \/><\/br><br \/>\n\u00a0 \u00a0 })<br \/><\/br><br \/>\n\u00a0 }).catch(console.warn)<\/p>\n<h2><strong>Uji coba<\/strong><\/h2>\n<p>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<\/p>\n<p>Dapat dilihat, sesaat setelah Anda menjalankan consumer, akan tercetak tulisan, \u201cReceived Hello World!\u201d Artinya,\u00a0<\/p>\n<p>Dapat kita lihat sesaat setelah kita menjalankan consumer akan tercetak tulisan \u2014 Received Hello world! Itu artinya, percobaan Anda menggunakan RabbitMQ pertama kali telah berhasil!<\/p>\n<p><strong>Sumber:<\/strong><br \/><\/br><br \/>\nmedium.com<br \/><\/br><br \/>\nmedium.com<br \/><\/br><br \/>\n3pillarglobal.com<br \/><\/br><br \/>\n\u00a0<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>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 &hellip; <\/p>\n","protected":false},"author":1,"featured_media":272,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-271","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-teknologi"],"_links":{"self":[{"href":"https:\/\/sentraldigitalindonesia.co.id\/blog\/wp-json\/wp\/v2\/posts\/271","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sentraldigitalindonesia.co.id\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sentraldigitalindonesia.co.id\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sentraldigitalindonesia.co.id\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sentraldigitalindonesia.co.id\/blog\/wp-json\/wp\/v2\/comments?post=271"}],"version-history":[{"count":0,"href":"https:\/\/sentraldigitalindonesia.co.id\/blog\/wp-json\/wp\/v2\/posts\/271\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sentraldigitalindonesia.co.id\/blog\/wp-json\/wp\/v2\/media\/272"}],"wp:attachment":[{"href":"https:\/\/sentraldigitalindonesia.co.id\/blog\/wp-json\/wp\/v2\/media?parent=271"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sentraldigitalindonesia.co.id\/blog\/wp-json\/wp\/v2\/categories?post=271"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sentraldigitalindonesia.co.id\/blog\/wp-json\/wp\/v2\/tags?post=271"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}