Pola Penunjukan RabbitMQ Golang
Pola penunjukan di RabbitMQ memperluas metode penunjukan pertukaran berdasarkan pola publikasi-langganan. Jenis pertukaran untuk pola penunjukan adalah langsung, yang juga merupakan pertukaran default untuk RabbitMQ. Pada bagian sebelumnya, pertukaran eksplisit tidak digunakan, namun pertukaran yang digunakan sebenarnya adalah pertukaran langsung.
Tip: Jika Anda belum familiar dengan aturan pola penunjukan, silakan baca Pola Penunjukan RabbitMQ.
1. Panduan Prasyarat
Mohon baca bab tentang Pola Publikasi-Langganan RabbitMQ Golang terlebih dahulu. Pada dasarnya, berbagai mode kerja RabbitMQ diimplementasikan oleh berbagai jenis pertukaran. Kode hampir sama, dengan perbedaan utama adalah definisi pertukaran. Oleh karena itu, setelah pola publikasi-langganan dipahami, pola lainnya menjadi cukup sederhana.
2. Mendeklarasikan Pertukaran Langsung
err = ch.ExchangeDeclare(
"tizi365_direct", // Nama pertukaran, harus unik
"direct", // Jenis pertukaran
true, // Tahan lama
false, // Otomatis dihapus
false, // Internal
false, // No-wait
nil, // Argumen
)
3. Mengirim Pesan
// Isi pesan
body := "Halo Tizi365.com!"
// Mengirim pesan
err = ch.Publish(
"tizi365_direct", // Pertukaran (nama pertukaran)
"blog", // Kunci penunjukan, parameter penting yang menentukan ke antrian mana pesan Anda akan dikirimkan
false, // Mandatory
false, // Immediate
amqp.Publishing {
ContentType: "text/plain", // Jenis konten pesan, dalam hal ini, teks biasa
Body: []byte(body), // Isi pesan
})
4. Konsumer Menerima Pesan
4.1. Membinding Pertukaran
// Mendeklarasikan antrian yang akan dioperasikan
q, err := ch.QueueDeclare(
"", // Nama antrian, jika tidak ditentukan, akan dibuat secara acak
false, // Antrian tahan lama
false, // Hapus saat tidak digunakan
true, // Eksklusif
false, // No-wait
nil, // Argumen
)
// Membinding antrian ke pertukaran yang ditentukan
err = ch.QueueBind(
q.Name, // Nama antrian
"blog", // Kunci penunjukan, jika sesuai dengan parameter penunjukan yang ditentukan saat mengirim pesan, pesan dikirim ke antrian saat ini
"tizi365_direct", // Nama pertukaran, yang harus konsisten dengan pertukaran yang didefinisikan di ujung pengirim pesan
false,
nil)
4.2. Mengonsumsi Pesan
// Membuat konsumer
msgs, err := ch.Consume(
q.Name, // Merujuk ke nama antrian sebelumnya
"", // Nama konsumer, jika tidak diisi, akan dibuat secara acak
true, // Mengakui pesan yang diproses oleh antrian secara otomatis
false, // Eksklusif
false, // No-local
false, // No-wait
nil, // Argumen
)
// Loop untuk mengonsumsi pesan dalam antrian
for d := range msgs {
log.Printf("Menerima pesan=%s", d.Body)
}