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

  1. 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 ☺.