Pialang Pesan | Antrian | Pesan Asinkron | Gin | Dengan Contoh
Halo Pengembang 💻💻. Dalam serangkaian artikel setelah ini, saya berencana untuk mendemonstrasikan bagaimana kita dapat memperkenalkan broker pesan di infrastruktur backend kita yang akan memungkinkan kita melakukan pemrosesan asynchronous dan terdistribusi. Pada artikel ini, saya akan menerapkan alur kerja sederhana menggunakan RabbitMQ di aplikasi golang untuk menunjukkan betapa hebatnya perantara pesan ini.
Skenario
Aplikasi kami memiliki beberapa permintaan atau tugas yang sangat memakan waktu. Saat pengguna mencoba melakukan tugas yang membutuhkan banyak sumber daya, frontend aplikasi kita akan mengirimkan permintaan ke backend dan menunggu hingga mendapat respons kembali. Waktu tunggu ini bisa lama dan membingungkan bagi pengguna yang melihat layar pemuatan yang membosankan di antarmuka pengguna.
Dengan diperkenalkannya RabbitMQ di backend, kami dapat memperbaiki masalah ini secara signifikan.
Ringkasan
- Langkah 1: Frontend aplikasi kami mengirimkan permintaan ke Backend Golang API kami.
- Langkah 2: API kami (yang juga bertindak sebagai Produser RabbitMQ) menangani permintaan tersebut dan menyimpan permintaan tersebut dalam Antrean.
- Langkah 3: API kami kemudian segera mengirimkan pengakuan respons ke frontend yang menyatakan bahwa permintaan telah berhasil diterima. Oleh karena itu, frontend tidak perlu menunggu lebih lama lagi.
- Langkah 3: Pada saat yang sama, Konsumen RabbitMQ secara rutin memeriksa apakah ada pesan permintaan dalam antrean. Setelah Produsen mengirimkan pesan permintaan ke dalam antrian, Konsumen akan menerimanya dan menangani permintaan tersebut.
- Langkah 5: Sekarang karena permintaan telah ditangani oleh konsumen, kita dapat menggunakan hasil permintaan tersebut dengan banyak cara. Salah satu caranya adalah dengan menyimpannya di database. Atau kita dapat mengirimkan hasil tersebut kembali ke frontend di koneksi WebSocket. Frontend kemudian dapat menunjukkan hasil yang luar biasa kepada pengguna.
Penerapan
Dalam artikel ini, kami akan mengimplementasikan RabbitMQ Producer dan Consumer dalam Backend Golang API kami.
Struktur Folder
Pengaturan
Inisialisasi Modul Golang dengan nama rabbitmq-golang
go mod init rabbitmq-golang
Instal perpustakaan klien Go RabbitMQ
go get github.com/rabbitmq/amqp091-go
Gunakan
Lokasi [ utils-› error.go]
Utilitas ini menangani kesalahan.
Konstan
Lokasi [konstanta -› Constant.go]
File ini berisi semua konstanta yang digunakan dalam artikel.
Penyiapan RabbitMQ
Lokasi [lib -› kelincimq.go]
- [Baris 8]: Kami terhubung ke server RabbitMQ kami
- [Baris 14]: Di sini kami membuat saluran dari server yang terhubung. Kami akan menggunakan saluran ini nanti untuk mempublikasikan dan menggunakan pesan dari antrian.
Penyiapan Docker RabbitMQ
Kami akan menyiapkan server manajemen kelinciMQ menggunakan buruh pelabuhan.
env
Lokasi [.env]
Penulisan Docker
Lokasi [buruh pelabuhan-compose.yml]
Di sini kita telah menggunakan rabbitmq:3-managementimage dan port meneruskan dua port.
Pengontrol
Kita memerlukan dua pengontrol untuk menangani dua permintaan task1 dan task2.
Pengontrol Tugas1
Lokasi [pengontrol -› task1Controller.go]
- [Baris 3]: Kami mempublikasikan pesan ke antrean yang disebut antrian-1[Baris 5] [kita akan membuat antrean ini nanti di fungsi utama] dengan tipe TASK1 [Baris 11] . Di sini kami menggunakan pertukaran default (“”) [Baris 4]. [kami akan menggunakan jenis pertukaran lainnya di artikel berikutnya untuk kasus penggunaan tingkat lanjut]
Pengontrol Task2
Lokasi [pengontrol -› task2Controller.go]
- Di sini kita mempublikasikan pesan ke antrian yang disebut antrian-1[Baris 5]dengan tipe TASK2 [Baris 11].
Router
Lokasi [router -› router.go]
Di sini kami menggunakan router Gin.
- [Baris 6–11]: Kami sedang menangani CORS.
- [Baris 17]: Ini menangani permintaan /task1 ke task1Controller [yang kami buat sebelumnya]
- [Baris 18]: Ini menangani permintaan /task2 ke task2Controller [yang kami buat sebelumnya]
Utama
Lokasi [main.go]
- [Baris 3]: Kami mengambil koneksi dan saluran kelinciMQ dari file konfigurasi yang kami buat sebelumnya. [lib -› kelincimq.go]
- [Baris 7–14]: Kita membuat antrean bernama antrian1 [nama disebutkan di Baris 8]
- [Baris 18–26]: Kami menyiapkan konsumen yang mendengarkan antrean bernama antrian1 yang disebutkan dalam Baris 19.
- [Baris 30–40]: Di sini kita mendengarkan pesan baru dari antrian. Setelah kami menerima pesan apa pun, kami memeriksa jenis pesan dan menanganinya sesuai dengan itu.
d.Ack(false)
:Baris ini menghapus pesan dari antrean yang menunjukkan bahwa pesan tersebut telah diakui.
Menjalankan Aplikasi
- Mulai wadah buruh pelabuhan RabbitMQ
docker-compose up -d
2. Mulai API Backend kami
go run main.go
API Ujung Belakang [ http://localhost:8000/]
Manajemen RabbitMQ [ http://localhost:9000/]
Bagian Dalam Antrean [http://localhost:9000/#/queues]
Kita dapat melihat bahwa antrian-1[nama yang kita gunakan untuk membuat antrian dalam kode kita] telah dibuat.
TES
Kirim permintaan POST untuk melakukan tugas 1.
curl -X POST localhost:8000/task1
Respon terhadap Frontend
Frontend mendapat respons instan yang mengatakan permintaan Task1 berhasil diterima. Kami sekarang tidak memerlukan Memuat UI.
Konsol API
Kami melihat log dari Konsumen RabbitMQ[Golang API]. Hal ini menunjukkan bahwa pesan permintaan telah diterima konsumen dari antrian.
KESIMPULAN
Jika Anda tersesat di bagian mana pun, Anda dapat memeriksa proyek Github saya.
Demikianlah akhir dari perjalanan singkat kami mengimplementasikan RabbitMQ di aplikasi golang. Semoga ini bisa membantu Anda dengan proyek Anda. Saya akan membuat lebih banyak artikel dalam beberapa hari mendatang yang menunjukkan kasus penggunaan RabbitMQ lebih lanjut. Jadi pantau terus. Saran apa pun akan sangat dihargai. Selamat Mengkode ☺.