Belajar RabbitMQ #
Selamat datang di rabbitmq.unisbadri.com. Halaman ini dirancang sebagai portal utama dan panduan komprehensif bagi kita untuk memahami arsitektur, implementasi, dan praktik terbaik penggunaan RabbitMQ dalam sistem berskala produksi. Komunikasi asinkron kini bukan lagi sekadar pelengkap atau opsi tambahan, melainkan komponen arsitektural fundamental yang menjamin keandalan, toleransi kegagalan (fault tolerance), dan skalabilitas horizontal dari sistem terdistribusi modern yang kita bangun.
Melalui portal ini, kita akan menjelajahi RabbitMQ dari konsep paling dasar hingga mekanisme internal yang sangat kompleks, seperti replikasi data dengan algoritma konsensus Raft, penanganan kegagalan dengan Dead Letter Exchange, hingga manajemen memori di dalam Erlang BEAM Virtual Machine.
Komunikasi Asinkron: Jantung Sistem Terdistribusi Modern #
Saat kita merancang arsitektur sistem, terutama ketika bertransisi dari aplikasi monolith yang terpusat menuju layanan terdistribusi (microservices), salah satu tantangan terbesar yang kita hadapi adalah bagaimana mengelola komunikasi antarkomponen. Di masa monolith, komunikasi terjadi di tingkat memori melalui pemanggilan fungsi (in-memory function call) yang sangat cepat dan hampir pasti berhasil. Namun, dalam arsitektur mikro, setiap pemanggilan fungsi berubah menjadi panggilan jaringan (network call) melalui protokol seperti HTTP/REST atau gRPC.
Jaringan adalah media yang tidak dapat diandalkan (unreliable). Jaringan rentan terhadap kegagalan koneksi, latensi tinggi, kehilangan paket data, dan kemacetan lalu lintas. Jika kita memaksakan seluruh komunikasi antar-layanan dilakukan secara sinkron (synchronous request-response), kita secara tidak sadar sedang membangun “Monolith Terdistribusi” (Distributed Monolith). Di bawah pola ini, semua kelemahan monolith tetap ada, sementara kerumitan operasional sistem terdistribusi bertambah berlipat ganda.
Sebagai ilustrasi, bayangkan skenario rantai panggilan sinkron berikut:
[Layanan API Gateway] ---> [Layanan Pesanan] ---> [Layanan Pembayaran] ---> [Layanan Inventaris]
Jika salah satu layanan di ujung rantai, misalnya Layanan Inventaris, mengalami kegagalan, kelambatan, atau sedang dalam proses restart, maka seluruh rantai di atasnya akan terhambat (blocked). Utas (thread) pada Layanan Pembayaran akan menunggu respons dari Layanan Inventaris, yang kemudian menyebabkan utas pada Layanan Pesanan habis, dan akhirnya pengguna menerima pesan 504 Gateway Timeout. Kegagalan satu komponen kecil menyebabkan seluruh sistem runtuh secara berantai. Kejadian ini dikenal sebagai Latency Cascade atau Cascading Failure.
Di sinilah komunikasi asinkron berbasis pesan (message-based asynchronous communication) masuk sebagai penyelamat. Dengan menempatkan perantara pesan di antara layanan-layanan tersebut, kita dapat memisahkan komunikasi mereka secara temporal dan spasial.
- Decoupling Temporal: Layanan pengirim tidak perlu menunggu layanan penerima aktif atau selesai memproses data pada saat yang sama. Produsen pesan cukup mengirimkan data ke perantara, menerima konfirmasi bahwa pesan telah disimpan dengan aman, lalu langsung kembali melayani pengguna.
- Decoupling Spasial (Lokasi): Layanan pengirim tidak perlu tahu di mana alamat IP atau port dari layanan penerima. Mereka hanya berkomunikasi dengan perantara pesan melalui kontrak nama antrean (queue) yang disepakati.
Apa itu RabbitMQ? #
RabbitMQ adalah sebuah message broker (perantara pesan) open-source kelas enterprise yang paling populer dan banyak digunakan di dunia. Tugas utamanya sangat sederhana: menerima pesan dari satu aplikasi (produsen/sender), menyimpannya dengan aman di dalam memori atau media penyimpanan permanen (disk), dan menyalurkannya ke satu atau lebih aplikasi lain (konsumen/receiver) ketika mereka siap memprosesnya.
Secara teknis, RabbitMQ dikembangkan untuk mengimplementasikan standar terbuka AMQP (Advanced Message Queuing Protocol). Keunikan AMQP dibanding protokol antrean pesan tradisional adalah pemisahan yang jelas antara tempat penerimaan pesan (Exchange) dan tempat penyimpanan pesan (Queue). Hal ini memberikan fleksibilitas perutean (routing) yang sangat tinggi, yang akan kita bahas secara mendalam pada bagian berikutnya.
Kekuatan Runtime Erlang BEAM VM #
Salah satu keputusan arsitektural paling cerdas di balik pengembangan RabbitMQ adalah pemilihan bahasa pemrograman Erlang dan runtime-nya, BEAM Virtual Machine. Erlang dirancang oleh Ericsson pada tahun 1980-an untuk menangani sistem telekomunikasi nirkabel yang menuntut tingkat ketersediaan sangat tinggi (99.999% uptime), concurrency massal, dan ketahanan terhadap kegagalan.
Dengan berjalan di atas Erlang BEAM VM, RabbitMQ mewarisi karakteristik luar biasa berikut:
- Lightweight Processes (Proses Ringan): Tidak seperti proses atau thread sistem operasi yang memakan banyak memori dan CPU untuk context switching, proses di Erlang BEAM dikelola secara internal oleh VM. Satu proses Erlang hanya membutuhkan memori sekitar 2–3 KB. Hal ini memungkinkan RabbitMQ menjalankan jutaan proses secara bersamaan untuk menangani koneksi, antrean, dan saluran komunikasi secara efisien.
- Actor Model & No Shared State: Setiap proses Erlang berjalan secara terisolasi tanpa berbagi memori satu sama lain (shared-nothing architecture). Komunikasi antar-proses dilakukan murni melalui pengiriman pesan internal. Desain ini menghilangkan kebutuhan akan kunci memori (mutex atau semaphore) yang rumit, sehingga menghindari potensi kebocoran memori (memory leaks) dan kebuntuan thread (deadlock).
- Fault Tolerance & Let It Crash: Filosofi Erlang adalah “biarkan proses itu runtuh jika terjadi error”. BEAM VM menggunakan struktur pohon pengawasan (Supervision Trees). Jika sebuah proses penanganan koneksi mengalami error yang tidak terduga, proses tersebut dibiarkan mati seketika, dan proses pengawas (supervisor) akan segera membuat ulang instance proses tersebut dalam hitungan milidetik tanpa mengganggu kestabilan sistem atau koneksi client lainnya.
Konsep Makro Pengaliran Pesan #
Untuk memahami bagaimana RabbitMQ mendistribusikan pesan dari satu titik ke titik lainnya, kita perlu memahami komponen-komponen utama yang terlibat dalam siklus hidup pesan tersebut. Aliran pesan di dalam RabbitMQ selalu mengikuti jalur logis yang terstruktur dengan ketat.
Berikut adalah gambaran makro alur pengiriman pesan dari produsen ke konsumen:
flowchart LR
Producer["Aplikasi Produsen<br>(Publisher)"] -->|"Kirim Pesan<br>(Routing Key: 'order.created')"| Exchange["Exchange<br>(Router Pesan)"]
Exchange -->|"Binding Rule<br>Match"| Queue["Queue<br>(Buffer Antrean)"]
Queue -->|"Kirim / Ambil Pesan<br>(Push / Pull)"| Consumer["Aplikasi Konsumen<br>(Subscriber)"]
style Producer stroke:#0288d1,stroke-width:2px
style Exchange stroke:#7b1fa2,stroke-width:2px
style Queue stroke:#388e3c,stroke-width:2px
style Consumer stroke:#e65100,stroke-width:2pxMari kita bedah peran dari masing-masing komponen dalam diagram di atas:
- Producer (Produsen): Aplikasi client yang kita buat yang bertugas menghasilkan dan mengirimkan data (pesan) ke RabbitMQ. Produsen tidak pernah mengirimkan pesan langsung ke antrean (queue). Produsen selalu menargetkan sebuah gerbang yang disebut Exchange.
- Exchange (Penukar/Router): Komponen internal RabbitMQ yang bertugas menerima pesan dari produsen dan memutuskan ke antrean mana pesan tersebut harus diteruskan. Exchange mengambil keputusan ini berdasarkan tipe exchange, atribut pesan, dan aturan pencocokan (routing key).
- Binding (Pengikat): Aturan penghubung yang kita konfigurasikan untuk mengaitkan sebuah Exchange dengan satu atau beberapa Queue. Binding memberi tahu exchange: “Jika kamu menerima pesan dengan kriteria X, teruskan ke Queue Y”.
- Routing Key (Kunci Perutean): Atribut berupa string teks yang ditempelkan oleh produsen pada pesan saat pesan dikirimkan. Exchange membandingkan kunci perutean ini dengan aturan pengikat (binding) untuk merutekan pesan dengan tepat.
- Queue (Antrean): Kotak surat atau buffer penyimpanan di dalam RabbitMQ yang menampung pesan sampai dikonsumsi oleh penerima. Queue memiliki sifat FIFO (First-In, First-Out), meskipun prioritas pesan dan konfigurasi antrean dapat memodifikasi urutan pemrosesan.
- Consumer (Konsumen): Aplikasi client yang kita buat yang bertugas mendengarkan antrean, mengambil pesan, dan mengeksekusi logika bisnis berdasarkan isi pesan tersebut.
Fitur Enterprise yang Membuat RabbitMQ Begitu Kuat #
RabbitMQ bukan sekadar perangkat lunak antrean pesan biasa yang bertindak sebagai pipa data sederhana. Untuk sistem skala besar yang melayani jutaan transaksi per hari, RabbitMQ menyediakan serangkaian fitur tangguh kelas enterprise yang menjamin keandalan data dan ketersediaan sistem yang stabil.
1. High Availability & Replikasi Data dengan Quorum Queues #
Dalam sistem produksi, kegagalan infrastruktur seperti kerusakan harddisk, crash pada server, atau pemadaman listrik di pusat data adalah kepastian yang tidak dapat dihindari. Jika kita hanya menyimpan antrean pesan pada satu server tunggal (single node), maka server tersebut menjadi titik kegagalan tunggal (Single Point of Failure).
RabbitMQ mengatasi masalah ini dengan menyediakan arsitektur Clustering. Kita dapat menggabungkan beberapa node RabbitMQ menjadi satu cluster logis yang bersatu. Di dalam cluster ini, kita menggunakan tipe antrean Quorum Queues.
Quorum Queues menggunakan algoritma konsensus Raft (algoritma yang sama dengan yang digunakan oleh Kubernetes etcd dan Consul) untuk mereplikasi isi antrean ke beberapa node dalam cluster. Setiap Quorum Queue terdiri dari satu node pemimpin (Leader) dan beberapa node pengikut (Followers). Semua operasi penulisan dan pembacaan pesan dialamatkan ke node Leader, yang kemudian secara otomatis mereplikasi data tersebut ke node Followers. Jika node Leader tiba-tiba mati, anggota cluster yang tersisa akan mendeteksi hilangnya pemimpin dan segera mengadakan pemilihan suara (leader election) secara otomatis untuk menunjuk Leader baru dalam hitungan milidetik tanpa kehilangan pesan yang telah dikonfirmasi.
2. Jaminan Pengiriman Pesan (Delivery Guarantees) #
RabbitMQ menyediakan mekanisme jaminan pengiriman data dua arah untuk memastikan tidak ada pesan yang hilang di tengah jalan akibat kegagalan jaringan atau aplikasi:
- Publisher Confirms (Konfirmasi Produsen): Ketika produsen mengirimkan pesan ke RabbitMQ, ada risiko pesan hilang di jaringan sebelum sampai ke broker, atau broker kehabisan memori sebelum sempat menulis pesan ke disk. Dengan mengaktifkan Publisher Confirms, RabbitMQ akan mengirimkan sinyal konfirmasi balik (Acknowledge/ACK) ke produsen setelah pesan berhasil diterima, dirutekan, dan ditulis dengan aman ke penyimpanan permanen. Jika gagal, broker mengirimkan sinyal NACK, memberi tahu produsen untuk mengirimkan ulang pesan tersebut.
- Consumer Acknowledgements (Konfirmasi Konsumen): Setelah pesan sampai di antrean dan dikirimkan ke konsumen, RabbitMQ tidak langsung menghapus pesan tersebut dari antrean. Broker akan menunggu konfirmasi dari konsumen yang menyatakan bahwa proses bisnis telah selesai dieksekusi dengan sukses. Jika aplikasi konsumen mengalami crash, koneksi TCP terputus, atau kehabisan memori saat memproses pesan tersebut, RabbitMQ akan mendeteksi hilangnya koneksi konsumen dan secara otomatis memasukkan kembali pesan tersebut (requeue) ke antrean agar dapat diproses oleh instance konsumen lainnya yang aktif.
3. Mesin Perutean Pesan yang Fleksibel (Flexible Routing Engine) #
Dengan AMQP, produsen tidak perlu mengkhawatirkan detail implementasi layanan konsumen. RabbitMQ menyediakan empat tipe Exchange dasar yang mencakup hampir semua pola integrasi sistem yang kita butuhkan:
- Direct Exchange: Perutean titik-ke-titik (point-to-point) yang mengirimkan pesan ke antrean tertentu berdasarkan kecocokan persis antara Routing Key pesan dengan Binding Key antrean. Cocok untuk tugas spesifik seperti pemrosesan transaksi pembayaran.
- Fanout Exchange: Pola siaran (publish-subscribe/broadcast) yang menduplikasi dan mengirimkan pesan ke semua antrean yang terikat tanpa memedulikan routing key yang dikirimkan. Sangat berguna untuk menyebarkan perubahan data ke berbagai layanan secara bersamaan (misal: event
OrderCreateddibagikan ke Layanan Notifikasi, Layanan Inventaris, dan Layanan Analisis sekaligus). - Topic Exchange: Perutean fleksibel berbasis pencocokan pola wildcard menggunakan tanda titik (
.), asterisk (*untuk satu kata), dan oktotorp/pagar (#untuk nol atau lebih kata). Pola ini sangat kuat untuk sistem IoT (Internet of Things) atau pelacakan log terdistribusi (misalnya merutekan pesan dari routing keyid.jakarta.sensor.suhuke antrean pemantauan wilayah DKI Jakarta). - Headers Exchange: Perutean pesan berdasarkan pencocokan header pesan (metadata) alih-alih routing key. Memberikan fleksibilitas perutean menggunakan struktur data key-value yang lebih kompleks.
4. Ekstensi dan Integrasi Global (Federation & Shovel) #
Untuk arsitektur multi-cloud atau multi-region (misalnya jika kita memiliki pusat data di Jakarta dan Singapura), berkomunikasi langsung lintas wilayah melalui koneksi sinkron akan memicu latensi jaringan yang sangat tinggi. RabbitMQ menyediakan plugin Federation dan Shovel yang memungkinkan kita menghubungkan cluster RabbitMQ di Jakarta dengan cluster RabbitMQ di Singapura secara asinkron. Pesan akan diantrekan secara lokal di Jakarta, lalu dikirimkan melalui jalur aman WAN ke Singapura secara otomatis tanpa mengganggu kinerja aplikasi produsen lokal.
Mind Map & Kurikulum Belajar Belajar RabbitMQ #
Untuk memandu perjalanan kita dari tingkat pemula hingga menjadi ahli arsitektur pesan, materi di dalam website ini telah disusun secara sistematis menjadi 12 modul pembelajaran yang saling terintegrasi.
Berikut adalah peta jalan (roadmap) pembelajaran yang akan kita lalui:
flowchart TD
Start["Beranda Utama<br>(Pengenalan)"] --> Module1["1. Dasar-dasar<br>(Basic)"]
Module1 --> Module2["2. Konsep Esensial<br>(Concept)"]
Module2 --> Module3["3. Model Messaging<br>(Messaging Model)"]
Module3 --> Module4["4. Jenis Exchange<br>(Exchange Type)"]
Module4 --> Module5["5. Detail Antrean<br>(Queue)"]
Module5 --> Module6["6. Siklus Pesan<br>(Message Lifecycle)"]
Module6 --> Module7["7. Jaminan Pengiriman<br>(Delivery Guarantee)"]
Module7 --> Module8["8. Penanganan Error<br>(Error Retry Strategy)"]
Module8 --> Module9["9. Arsitektur Internal<br>(Architecture)"]
Module9 --> Module10["10. Komparasi Broker<br>(RabbitMQ vs Kafka)"]
Module10 --> Module11["11. Anti-Pattern<br>(Antipattern)"]
Module11 --> Module12["12. Praktik Terbaik<br>(Best Practice)"]
style Start stroke:#0288d1,stroke-width:2px
style Module1 stroke:#7b1fa2,stroke-width:2px
style Module2 stroke:#7b1fa2,stroke-width:2px
style Module3 stroke:#7b1fa2,stroke-width:2px
style Module4 stroke:#388e3c,stroke-width:2px
style Module5 stroke:#388e3c,stroke-width:2px
style Module6 stroke:#388e3c,stroke-width:2px
style Module7 stroke:#e65100,stroke-width:2px
style Module8 stroke:#e65100,stroke-width:2px
style Module9 stroke:#e65100,stroke-width:2px
style Module10 stroke:#c62828,stroke-width:2px
style Module11 stroke:#c62828,stroke-width:2px
style Module12 stroke:#2e7d32,stroke-width:2pxMari kita lihat apa saja yang akan kita bedah di setiap modulnya:
Modul 1: Dasar-dasar (basic/)
#
Kita akan mempelajari urgensi penggunaan message broker, mengidentifikasi masalah nyata yang diselesaikannya (seperti latency cascade, tight coupling, dan kegagalan berantai), serta melihat posisi RabbitMQ dalam lanskap arsitektur microservices modern saat disandingkan dengan protokol komunikasi langsung.
Modul 2: Konsep Esensial (concept/)
#
Modul ini membahas definisi abstrak dari komponen-komponen antrean pesan. Kita akan membedah konsep pemisahan dependensi (decoupling), model eksekusi asinkron, serta karakteristik esensial dari sebuah antrean pesan.
Modul 3: Model Messaging AMQP (messaging-model/)
#
Kita akan mempelajari anatomi protokol AMQP secara mendalam. Di sini kita akan membahas detail konfigurasi parameter Producer, Consumer, Message, Queue, Exchange, Binding, dan penggunaan Routing Key yang tepat.
Modul 4: Jenis-jenis Exchange (exchange-type/)
#
Pembahasan mendalam tentang cara kerja internal perutean pesan di dalam RabbitMQ. Kita akan mempraktikkan konfigurasi dan use-case spesifik untuk exchange tipe Direct, Fanout, Topic, dan Headers, lengkap dengan visualisasi alur datanya.
Modul 5: Detail Struktur Antrean (queue/)
#
Antrean bukan sekadar tempat menyimpan pesan. Kita akan mempelajari perbedaan tipe antrean dari sisi kegunaan dan performa, seperti perbedaan antara antrean persisten (Durable) dengan antrean sementara (Transient), antrean eksklusif (Exclusive), antrean yang terhapus otomatis (Autodelete), antrean berkinerja tinggi (Lazy Queues), serta antrean terdistribusi konsisten (Quorum Queues).
Modul 6: Siklus Hidup Pesan (message-lifecycle/)
#
Kita akan melacak perjalanan sebuah pesan dari awal dikirim oleh aplikasi produsen, melewati proses serialisasi jaringan, diterima oleh exchange, dirutekan berdasarkan aturan binding, mengantre di queue, dikirim ke konsumen (delivery), hingga akhirnya dihapus setelah menerima konfirmasi penerimaan (acknowledgement).
Modul 7: Jaminan Pengiriman Pesan (delivery-guarantee/)
#
Mempelajari cara merancang sistem tanpa risiko kehilangan data. Topik ini membedah Delivery Guarantees yang mencakup implementasi teknis dari tingkat jaminan pesan At-most-once, At-least-once, dan Exactly-once, serta konfigurasi Publisher Confirms dan Consumer Acknowledgements.
Modul 8: Strategi Error & Retry (error-retry-strategy/)
#
Di dunia nyata, pemrosesan pesan bisa gagal akibat kegagalan database konsumen atau kegagalan pihak ketiga (API eksternal). Modul ini menyediakan panduan praktis untuk menangani pesan yang rusak (poison message), mengalihkan pesan ke Dead Letter Exchange (DLX), menggunakan Message TTL, serta menerapkan mekanisme Exponential Backoff dengan antrean penundaan (delay queue).
Modul 9: Arsitektur Internal Broker (architecture/)
#
Bagi para arsitek sistem dan administrator database, modul ini akan membawa kita menyelami arsitektur internal RabbitMQ. Kita akan mempelajari alur proses internal di dalam Erlang BEAM VM, bagaimana metadata cluster dikelola, serta sinkronisasi state antar node dalam cluster tunggal maupun multi-node cluster.
Modul 10: Komparasi Broker (rabbitmq-vs-kafka/)
#
Seringkali engineer bingung memilih antara RabbitMQ dan Apache Kafka. Modul ini menyajikan analisis komparatif yang objektif dari berbagai aspek arsitektural seperti perbedaan konsep smart broker / dumb consumer (RabbitMQ) vs dumb broker / smart consumer (Kafka), karakteristik throughput, jaminan pengurutan (ordering guarantee), serta kapabilitas memutar ulang pesan (replay capability).
Modul 11: Pola Anti-Pattern (antipattern/)
#
Sebelum mengimplementasikan RabbitMQ, kita harus tahu apa saja kesalahan fatal yang sering dilakukan developer di lapangan. Kita akan membedah anti-pattern seperti menggunakan RabbitMQ sebagai database persisten, mengabaikan mekanisme backpressure, membuat antrean secara berlebihan (queue explosion), serta menyalurkan seluruh jenis event ke dalam satu antrean tunggal.
Modul 12: Praktik Terbaik (best-practice/)
#
Sebagai penutup rangkaian tutorial, modul ini menyajikan ringkasan prinsip-prinsip desain terbaik untuk arsitektur pesan, panduan pemantauan (monitoring) menggunakan metrik Prometheus dan visualisasi Grafana, serta checklist review lengkap yang wajib kita jalankan sebelum meluncurkan sistem ke production.
Pola Anti-Pattern Konseptual vs Solusi #
Untuk memberikan gambaran awal mengenai pendekatan teknis yang digunakan dalam seri tutorial ini, mari kita bandingkan salah satu kesalahan konseptual paling umum yang sering dilakukan developer saat pertama kali mengadopsi RabbitMQ:
Kasus: Menyimpan Histori Data di dalam Queue #
Banyak developer yang terbiasa dengan database SQL mencoba menerapkan pola pikir yang sama pada RabbitMQ. Mereka ingin menyimpan seluruh pesan yang masuk di dalam antrean agar dapat dibaca kembali di masa mendatang sebagai log histori audit transaksi.
// ANTI-PATTERN: Membiarkan pesan menumpuk di antrean untuk histori audit
[Produsen] ---> Kirim Event ---> [Exchange] ---> [Queue: audit.transactions]
|
+---> (Pesan tidak pernah di-ACK agar tetap ada di queue)
+---> (Atau tidak ada konsumen yang aktif menarik pesan)
Mengapa ini salah? #
RabbitMQ dirancang secara optimal untuk menangani pesan yang bersifat transient (singkat/sementara). Struktur data antrean RabbitMQ dioptimalkan agar bekerja sangat cepat ketika ukuran antrean mendekati nol. Ketika jutaan pesan dibiarkan menumpuk di dalam antrean tanpa pernah dihapus (di-ACK):
- Konsumsi Memori Melonjak: RabbitMQ akan mencoba mempertahankan indeks pesan di dalam memori RAM untuk mempercepat akses. Antrean yang sangat panjang akan menghabiskan RAM broker.
- Paging ke Disk: Jika RAM melampaui batas ambang batas (High Memory Watermark), Erlang VM akan menghentikan seluruh aktivitas penerimaan pesan (block publishers) dan mulai memaksa memindahkan isi memori ke dalam disk (paging). Proses ini sangat lambat dan memicu latensi tinggi pada seluruh sistem.
- Proses Pemulihan Lambat: Jika server RabbitMQ mengalami crash, proses pembacaan kembali indeks jutaan pesan dari disk ke memori saat startup akan membutuhkan waktu yang sangat lama, menyebabkan downtime sistem yang panjang.
Solusi yang Benar #
Gunakan RabbitMQ murni sebagai pipa pengalir data transient. Untuk histori audit, konsumen harus segera mengambil pesan, memprosesnya, mengirimkan ACK untuk menghapus pesan dari broker, dan menuliskan data tersebut ke media penyimpanan dingin (cold storage) yang sesuai seperti PostgreSQL, Elasticsearch, atau Object Storage (S3).
// BENAR: Mengalirkan pesan transient ke database untuk histori jangka panjang
[Produsen] ---> [Exchange] ---> [Queue: audit.transactions]
|
v
[Konsumen Audit]
|
+---> 1. Simpan ke PostgreSQL / Elasticsearch (Histori Permanen)
+---> 2. Kirim ACK ke RabbitMQ (Pesan dihapus dari queue)
Ringkasan #
- Komunikasi Asinkron — Merupakan solusi fundamental untuk memutus dependensi sinkron antar-layanan, mencegah terjadinya latency cascade, dan mengisolasi kegagalan sistem.
- Message Broker vs Database — RabbitMQ dioptimalkan untuk pengiriman data transient dengan latensi sangat rendah. Antrean harus selalu dijaga agar tetap pendek dengan segera mengonsumsi dan melakukan acknowledge pesan.
- Erlang BEAM VM — Menyediakan fondasi yang sangat tangguh untuk konkurensi massal, isolasi memori per proses, dan pemulihan kegagalan otomatis yang terstruktur.
- Peta Pembelajaran — Seri tutorial di website ini dirancang secara runut dari dasar-dasar arsitektur, detail model messaging AMQP, penanganan kegagalan produksi, hingga perbandingan mendalam dengan Apache Kafka.
Berikutnya: Apa itu RabbitMQ? →