Skip to main content

Pengenalan RabbitMQ: Fungsionalitas, Instalasi dan Kasus Penggunaannya dengan Spring Boot 1

RabbitMQ adalah message broker open-source yang mendukung berbagai protokol messaging dan sering digunakan dalam sistem terdistribusi untuk mengirim pesan antara aplikasi. Berikut adalah pengenalan dan beberapa aspek penting terkait RabbitMQ:

1. Pengenalan RabbitMQ

RabbitMQ adalah message broker berbasis queue yang memungkinkan aplikasi saling berkomunikasi melalui pesan. Ia mengimplementasikan Advanced Message Queuing Protocol (AMQP), meskipun juga mendukung beberapa protokol lainnya seperti MQTT dan STOMP.

RabbitMQ menyimpan pesan dalam antrian (queues), dan memungkinkan aplikasi untuk mengirim atau menerima pesan. Hal ini membuat RabbitMQ sangat bermanfaat dalam lingkungan yang memerlukan komunikasi asinkron atau sistem terdistribusi.

2. Sejarah RabbitMQ

RabbitMQ dikembangkan oleh Pivotal Software, yang merupakan bagian dari VMware, dengan tujuan untuk mendukung pengimplementasian AMQP. Pada awalnya, RabbitMQ diluncurkan pada tahun 2007, dan dengan cepat mendapatkan popularitas sebagai salah satu message broker paling andal dan stabil di komunitas open-source.

Karena dukungan yang luas terhadap berbagai protokol, skalabilitas, serta kemampuannya menangani traffic yang besar, RabbitMQ kini banyak digunakan dalam arsitektur microservices dan aplikasi skala besar.

3. Fungsionalitas Utama RabbitMQ

  • Antrian Pesan (Queues): Pesan yang dikirimkan oleh produser disimpan di dalam antrian dan akan dikonsumsi oleh konsumer. Ini memisahkan proses pengiriman dan penerimaan, mendukung komunikasi asinkron.
  • Exchange Types: RabbitMQ menyediakan berbagai tipe exchange yang mengatur bagaimana pesan didistribusikan ke antrian berdasarkan routing key. Tipe exchange utama:
    • Direct Exchange: Mengarahkan pesan ke antrian tertentu sesuai dengan routing key.
    • Fanout Exchange: Menyebarkan pesan ke semua antrian yang terhubung tanpa memperhatikan routing key.
    • Topic Exchange: Mengarahkan pesan ke antrian berdasarkan pola routing key yang cocok.
    • Headers Exchange: Mengarahkan pesan berdasarkan atribut header, tidak routing key.
  • Pengelolaan Durabilitas: RabbitMQ mendukung durabilitas pesan dan antrian sehingga pesan tidak hilang jika broker mengalami kegagalan.
  • Acknowledgments: Sistem ini mendukung acknowledgment yang memastikan pesan telah berhasil diterima oleh konsumer sebelum dihapus dari antrian.
  • Clustering dan Federation: Mendukung clustering dan federation untuk menyeimbangkan beban dan distribusi pesan di antara banyak instance.

4. Protokol RabbitMQ

RabbitMQ pada dasarnya berbasis pada Advanced Message Queuing Protocol (AMQP), namun ia juga mendukung protokol lainnya:

  • AMQP (Advanced Message Queuing Protocol): Protokol utama yang mendasari RabbitMQ, dirancang untuk menyediakan messaging yang andal dan interoperabilitas lintas platform.
  • MQTT (Message Queuing Telemetry Transport): Protokol ringan yang sering digunakan untuk komunikasi IoT.
  • STOMP (Simple Text Oriented Messaging Protocol): Protokol yang lebih sederhana dan berbasis teks, sering digunakan dalam sistem yang memerlukan komunikasi yang mudah dibaca manusia.

5. Contoh Kasus Penggunaan RabbitMQ

  • Microservices: Dalam arsitektur microservices, RabbitMQ digunakan untuk memfasilitasi komunikasi antar layanan yang terpisah secara fisik, misalnya dengan mengirimkan pesan untuk memproses tugas di background.
  • Task Queue: RabbitMQ umum digunakan untuk antrian tugas asinkron. Misalnya, aplikasi web dapat menempatkan tugas seperti pengiriman email ke dalam antrian untuk diproses secara terpisah.
  • Data Streaming: RabbitMQ dapat digunakan untuk memproses dan mendistribusikan data real-time, seperti streaming log atau event monitoring.
  • Sistem Pengiriman Notifikasi: RabbitMQ memungkinkan pengiriman notifikasi secara real-time, misalnya dalam aplikasi mobile atau platform sosial.

RabbitMQ memungkinkan pengelolaan komunikasi antar aplikasi yang efisien, terutama dalam lingkungan yang besar atau kompleks.

Perbandingan Dengan Apache Kafka

RabbitMQ dan Apache Kafka sama-sama message broker yang digunakan untuk mengelola komunikasi antar aplikasi dalam sistem terdistribusi. Namun, keduanya memiliki perbedaan signifikan dalam hal arsitektur, penggunaan, dan fungsionalitas, serta beberapa persamaan dalam tujuan utamanya.

Perbedaan RabbitMQ dan Kafka

  1. Arsitektur dan Desain:

    • RabbitMQ dirancang sebagai message broker tradisional dengan fokus pada pengiriman pesan satu per satu (message queue) dan dukungan berbagai protokol messaging (AMQP, MQTT, STOMP). Pesan dikirim dari produser ke konsumer melalui queue dan dihapus setelah diterima oleh konsumer.
    • Kafka adalah platform streaming berbasis log terdistribusi. Kafka menyimpan pesan dalam log partition yang persisten. Konsumer dapat membaca pesan berulang kali, karena Kafka tidak menghapus pesan setelah dikonsumsi kecuali sudah melewati batas waktu retensi.
  2. Pola Konsumsi Pesan:

    • RabbitMQ menggunakan pola push di mana pesan aktif didorong ke konsumer, dan setiap pesan hanya dikonsumsi sekali kecuali ada kegagalan. Antrian di RabbitMQ memisahkan produser dan konsumer, memungkinkan pesan dikonsumsi secara asinkron.
    • Kafka menggunakan pola pull di mana konsumer secara aktif mengambil pesan dari topic sesuai dengan posisi (offset) dalam log. Konsumer bisa memproses ulang pesan dari awal sesuai kebutuhan, sehingga Kafka mendukung replayable events.
  3. Kasus Penggunaan:

    • RabbitMQ lebih cocok untuk skenario di mana latensi rendah dan pengiriman pesan secara tepat waktu sangat penting, seperti antrian tugas (task queue) atau aplikasi yang memerlukan respons cepat (misalnya sistem real-time).
    • Kafka lebih cocok untuk pengolahan data dalam jumlah besar, streaming data real-time, dan kasus yang memerlukan analisis data berulang (seperti log analytics atau event sourcing). Kafka unggul dalam throughput yang tinggi dan durasi penyimpanan pesan yang lama.
  4. Durasi Penyimpanan Pesan:

    • RabbitMQ menyimpan pesan di antrian hanya sampai pesan diterima oleh konsumer. Setelah dikonsumsi, pesan dihapus (kecuali ada pengaturan lain seperti dead-letter queue).
    • Kafka menyimpan pesan selama waktu retensi yang telah ditentukan, biasanya dalam hitungan hari atau lebih lama, sehingga pesan bisa diakses kembali oleh konsumer kapan saja selama masih dalam periode retensi.
  5. Model Pengiriman Pesan:

    • RabbitMQ mendukung berbagai model pengiriman pesan, seperti point-to-point (satu produser dan satu konsumer), publish/subscribe (banyak konsumer dari satu pesan), dan routing menggunakan exchanges yang berbeda.
    • Kafka menggunakan model publish/subscribe dengan topics, di mana produser menulis ke topic tertentu, dan banyak konsumer bisa membaca dari topic tersebut secara bersamaan.
  6. Skalabilitas:

    • RabbitMQ dapat di-cluster untuk meningkatkan ketersediaan dan mendistribusikan beban, tetapi skalabilitasnya terbatas pada arsitektur queue-based yang membatasi konsumsi paralel pada level pesan individu.
    • Kafka sangat skalabel dengan menggunakan partisi pada topic, yang memungkinkan data diproses secara paralel oleh banyak konsumer dan replication untuk menjaga ketersediaan data.

Persamaan RabbitMQ dan Kafka

  1. Mendukung Komunikasi Asinkron: Kedua sistem mendukung komunikasi asinkron antara produser dan konsumer, yang memungkinkan aplikasi berinteraksi tanpa harus menunggu respons langsung.

  2. Digunakan dalam Arsitektur Microservices: Baik RabbitMQ maupun Kafka sering digunakan dalam arsitektur microservices untuk mengelola komunikasi antar layanan dan mengoptimalkan alur kerja dalam sistem yang terdistribusi.

  3. Reliabilitas Pengiriman Pesan: Keduanya mendukung mekanisme untuk memastikan pesan diterima dan diproses dengan benar. RabbitMQ menggunakan acknowledgment pesan, sementara Kafka memanfaatkan konsep offset dan retensi untuk memastikan pesan tersedia untuk diproses ulang jika diperlukan.

  4. High Availability: Keduanya mendukung fitur high availability melalui clustering. Kafka menggunakan replikasi partisi untuk memastikan pesan tetap tersedia jika salah satu node gagal, sementara RabbitMQ menggunakan clustering untuk replikasi antrian dan failover.

Kapan Menggunakan RabbitMQ atau Kafka?

  • Gunakan RabbitMQ jika:

    • Membutuhkan latensi rendah dan pengiriman pesan real-time.
    • Berurusan dengan tugas asinkron atau task queue di mana setiap pesan harus segera dihapus setelah diproses.
    • Memerlukan komunikasi yang fleksibel dengan protokol berbeda, seperti MQTT atau STOMP.
    • Memiliki beban kerja yang lebih kecil dengan kecepatan pesan yang relatif rendah.
  • Gunakan Kafka jika:

    • Mengolah volume data besar atau memerlukan throughput tinggi.
    • Ingin menyimpan pesan dalam jangka waktu yang lama untuk analisis ulang.
    • Berfokus pada aplikasi yang memerlukan streaming data atau event sourcing.
    • Sistem yang memerlukan skalabilitas tinggi dan partisi data yang efisien.

Table Perbandingan RabbitMQ VS Kafka

Berikut adalah tabel komparasi yang membandingkan persamaan dan perbedaan antara RabbitMQ dan Apache Kafka:

AspekRabbitMQApache KafkaPersamaan
ArsitekturQueue-based, message brokerLog-based, distributed streaming platformKeduanya adalah message broker untuk komunikasi asinkron
Pola Konsumsi PesanPush-based (pesan dikirim ke konsumer)Pull-based (konsumer mengambil pesan)Mendukung komunikasi asinkron antara produser dan konsumer
Model PenyimpananPesan dihapus setelah diterima konsumerPesan disimpan dalam log untuk periode tertentuKeduanya bisa di-cluster untuk meningkatkan ketersediaan
Durasi PenyimpananSampai pesan dikonsumsi, kecuali dengan DLQBerdasarkan periode retensi (default hari)Mendukung reliabilitas pengiriman pesan melalui mekanisme acknowledgment dan offset
Kasus PenggunaanTask queue, real-time messaging, aplikasi responsifData streaming, big data pipeline, event sourcingDigunakan dalam arsitektur microservices dan sistem terdistribusi
ProtokolAMQP (default), juga mendukung MQTT, STOMPProtokol Kafka sendiri (custom TCP-based)Keduanya mendukung pengiriman pesan yang andal dengan replikasi
Pengiriman PesanSetiap pesan dikonsumsi sekali (jika tidak ada kegagalan)Pesan dapat dibaca berulang kali (replayable)Keduanya mendukung publish/subscribe
SkalabilitasSkalabilitas terbatas oleh model antrianSkalabilitas tinggi dengan partisi topicsMendukung clustering dan distribusi pesan
Pengelolaan BebanMendukung fair dispatch, tetapi skala terbatasMendukung throughput sangat tinggiDapat mendistribusikan pesan ke banyak konsumer secara paralel
DurabilitasMendukung durabilitas antrian dan pesanPesan persisten di disk selama periode retensiMemberikan dukungan untuk pengiriman pesan yang andal
LatensiLatensi rendah, ideal untuk komunikasi cepatLatensi relatif lebih tinggi dibanding RabbitMQKeduanya dapat dioptimalkan untuk high availability
Kebutuhan ResourceMemerlukan lebih sedikit resource untuk pesan kecilMemerlukan lebih banyak resource untuk throughput tinggiCocok untuk integrasi dalam arsitektur skala besar
Penanganan KonsumerKonsumer menerima pesan satu per satu, dihapus setelahnyaKonsumer membaca pesan dengan offset, tidak dihapusKeduanya mendukung banyak produser dan konsumer

Tabel ini menguraikan poin-poin utama terkait perbedaan dan persamaan antara RabbitMQ dan Kafka dalam hal penggunaan dan fungsionalitas, memudahkan untuk memilih broker yang tepat sesuai kebutuhan sistem.

RabbitMQ dan Kafka adalah dua alat yang kuat namun memiliki fokus berbeda. RabbitMQ lebih cocok untuk aplikasi dengan kebutuhan komunikasi yang cepat dan ringan, sementara Kafka lebih cocok untuk sistem dengan skala besar yang berfokus pada pemrosesan data secara berkelanjutan atau streaming. Memilih antara keduanya bergantung pada jenis arsitektur dan alur kerja yang ingin dicapai.

Instalasi RabbitMQ dengan Docker Desktop

Install official image dengan versi management supaya ada dukungan plugin rabbitmq_management.

RabbitMQ Image Pull

RabbitMQ Image versi management dengan plugin rabbitmq_management


Ini adalah beberapa image yang sudah ada di laptop saya kita pakai yang 4.0.3 Management


Port yang di forward ke HOSTS



ganti username dan password (defaultnya guest/guest)

Env variable username dan password sebelumnya

Ports yang di forward ke Host

Cek RabbitMQ dengan Management Plugin

Buka alamat http://localhost:15672/ di browser apa saja lalu masukan username user dan pass nya password.

Halaman login RabbitMQ Management 


Dashboard RabbitMQ Management


Selanjutnya : Integrasi dan implementasi dengan Springboot.

Comments

Popular posts from this blog

Numpang Kerja Remote dari Bandung Creative Hub

Semalam kemarin (09 Januari 2019) tidak sengaja kami sekeluarga lewat Bandung Digital Hub saat pulang dari Fish Wow Cheeseee  yang di Jl. Lombok. Bandung Digital Hub ini sendiri berlokasi tidak jauh dari dari tempat kami makan tersebut, yaitu berlokasi di Jl. Laswi No.7, Kacapiring, Batununggal, Kota Bandung, Jawa Barat 40271. Berhubung untuk bulan Januari 2019 ini sedang tidak masuk ke kantor maka saya putuskan untuk besoknya (hari ini 09 Januari 2019) nyoba untuk bekerja remote dari Bandung Digital Hub , apalagi istri yang kebetulan follower pak Ridwan Kamil di Instagram juga Facebook dan tampaknya pernah lihat ulasan mengenai tempat ini sehingga tampak antusias supaya saya datang ketempat ini ini dan mencoba bekerja dari gedung creative hub dan coworking yang keren ini.  Tempat Parkir Masalah utama saat kita datang ke coworking space terutama yang berlokasi di Bandung (atau mungkin kota-kota lainnya) adalah lahan parkir, kadang lahan parkir ...

Numpang Kerja Remote dari Bandung Digital Valley

Satu lagi co-working place  gratisan dan keren yang cukup populer dikota Bandung, co-working place yang juga memberikan fasilitas tempat kerja (co-working place) dan fitur-fitur menarik lainnya,  co-working place keren  ini adalah Bandung Digital Valley atau yang sering disingkat BDV . C o-working place  Bandung Digital Valley ini  merupakan bagian dari Telkom , mulai aktif digunakan dari sekitar tahun 2012 lalu .  Tempat ini biasanya menjadi tempat favorit bagi para pengiat startup, freelancer, dan mahasiswa . Gedung BDV Gedung BDV Gedung BDV Co-working space Bandung Digital Valley ini sendiri berlokasi di Menara Bandung Digital Valley, Jl. Gegerkalong Hilir No.47, Sukarasa, Sukasari, Kota Bandung, Jawa Barat, detailnya bisa dilihat di Google map berikut. Pemandangan jalan setelah pintu satpam. Free Co-working Space Membership Untuk mulai menggunakan fasilitas co-working space ini secara gratis maka yang pe...

Membuat Authentikasi Berbasis Token pada Spring Boot dengan Spring Security dan JWT

Setelah beberapa kali mencari tutorial tentang otentikasi aplikasi web Spring Boot dengan menggunakan JWT yang mudah dipahami akhirnya saya menemukan artikel berbahasa Inggris tapi sangat mudah dipahami  dan diikuti, artikel tersbut berada disini , dengan judul " Spring Boot Token based Authentication with Spring Security & JWT ". Untuk memudahkan orang-orang yang terbiasa membaca artikel dalam bahasa indonesia (termasuk saya sendiri), artikel ini saya buat dan susun ulang (artikel aslinya tidak tertulis dengan runtut dan dapat membuat pemula bingung dengan berbagai error yang muncul) supaya lebih mudah untuk diikuti dan dapat di gunakan bersama. Applikasi yang akan kita buat adalah aplikasi web yang setiap endpoint-nya hanya bisa di akses oleh role tertentu. 1. Tools Yang Diperlukan IntelliJ Idea text editor. Spring Assistant Plugin. Postman. PostgreSQL + DBeaver. Min Java 8 Spring Boot 2.1.8 (dengan Spring Security, Spring Web, Spring Data JPA). jjwt 0.9.1. Maven 3.6.1....