Belajar Message Broker dengan RabbitMQ menggunakan Go
Postingan ini akan menjelaskan cara implementasi Message Broker dengan RabbitMQ menggunakan Golang.
Apa itu Message Broker?
Merupakan bagian dari Messaging Microservice yang berguna sekali sebagai service tambahan diantara service-service yang terhubung agar data yang dikirim atau diterima setiap service dapat terkelola dengan baik. Jika kalian masih belum paham, tonton video penjelasan dari Eko Kurniawan Khannedy tentang apa itu Message Broker.
Apa itu RabbitMQ?
Ya message broker; Menerima dan meneruskan pesan (data). Anggaplah sebagai kantor pos: ketika Anda mau mengirim surat di kotak pos, Anda yakin bahwa tukang pos nantinya akan mengirimkan surat tersebut ke penerima Anda. Dalam analogi ini, RabbitMQ adalah kotak pos, kantor pos, dan tukang pos.
RabbitMQ, dan Messaging secara umum, menggunakan beberapa jargon.
- Producer: adalah program yang mengirimkan pesan.
- Queue: (antrian) adalah nama kotak pos di RabbitMQ. Banyak producer dapat mengirim pesan yang masuk ke satu antrean, dan banyak consumer dapat mencoba menerima data dari satu antrean.
- Consumer: adalah program yang sebagian besar menunggu untuk menerima pesan.
Perhatikan bahwa producer, consumer, dan broker tidak harus ada di host yang sama. Aplikasi juga bisa menjadi producer dan consumer.
Prerequisites
- Instal RabbitMQ, Anda bisa melihat cara installnya disini. Saya sendiri menggunakan Docker untuk menjalankannya.
- Tentunya install Go. Disini caranya.
Jalankan RabbitMQ
Jalankan aplikasi RabbitMQ, jika berhasil kita dapat membuka dashboardnya di http://localhost:15672 dan akan muncul seperti berikut:
Jika kalian menjalankan dengan kredensial yang berbeda, sesuaikan port dan konfigurasi lainnya.
Membuat Proyek
Kita akan membuat proyek sederhana untuk postingan kali ini, dimana Server dan Client atau kita sebut Producer dan Consumer dalam satu aplikasi saja. Dalam kenyataanya mungkin terpisah module/aplikasi.
Buka terminal dan buat folder module go seperti berikut:
mkdir belajar-rabbitmq
cd belajar-rabbitmq
go mod init belajar-rabbitmq
Buat folder dan file yang dibutuhkan seperti pada gambar berikut:
Install RabbitMQ Client untuk Go
Selanjutnya kita install librarynya dulu, dengan perintah:
go get github.com/rabbitmq/amqp091-go
Membuat Server/Producer
Buka server/main.go dan isi dengan kode berikut:
Membuat Client/Consumer
Buka client/main.go dan isi dengan kode berikut:
Membuat Helper
Buka util/helper.go dan isi dengan kode berikut:
Menjalankan Server dan Client
Pertama, kita jalankan server terlebih dahulu. Buka terminal dan jalankan perintah berikut:
$ go run server/main.go
Jika berhasil maka akan ada output seperti berikut:
$ 2022/12/02 13:30:36 [x] Sent Hello World
Lalu, kita listening pesan dari server dengan menjalankan client, dengan perintah berikut pada terminal baru:
$ go run client/main.go
Jika berhasil maka akan ada output seperti berikut:
$ 2022/12/02 13:33:33 [*] Waiting for messages. To exit press CTRL+C
$ 2022/12/02 13:33:33 Received a message: Hello World
Jika kita running script server lagi, makan secara otomatis client akan menerima pesan tersebut dengan cepat. Namun, jika clientnya bermasalah, data pesan tersebut akan masuk kedalam antrian si RabbitMQ. Dan kalau cliennya menyala kembali, otomatis pesan tersebut akan langsung diterima.