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)
}