Golang RabbitMQ Yönlendirme Deseni

Yönlendirme deseni, RabbitMQ'da yayın-abone deseninin temelinde değişim yönlendirme yöntemini genişletir. Yönlendirme deseni için değişim türü doğrudur ve aynı zamanda RabbitMQ için varsayılan değişimdir. Önceki bölümlerde açık bir değişim kullanılmadı, ancak aslında kullanılan temel değişim doğrudur.

İpucu: Yönlendirme deseni kurallarıyla tanışık değilseniz, lütfen RabbitMQ Yönlendirme Desenleri'ni okuyun.

1. Önkoşul Öğretici

Lütfen önce Golang RabbitMQ Yayın-Abone Deseni bölümünü okuyun. Temelde, RabbitMQ'nun çeşitli çalışma modları farklı türdeki değişimler tarafından uygulanır. Kod neredeyse aynıdır, ana fark değişimin tanımıdır. Dolayısıyla, yayın-abone deseninin anlaşılmasıyla diğer desenler oldukça basittir.

2. Doğrudan Değişim Bildirimi

err = ch.ExchangeDeclare(
  "tizi365_direct", // Değişim adı, benzersiz olmalıdır
  "direct",         // Değişim türü
  true,             // Kalıcı
  false,            // Otomatik silinme
  false,            // İçsel
  false,            // Bekleme yok
  nil,              // Argümanlar
)

3. Mesaj Gönderme

	// Mesaj içeriği
	body := "Merhaba Tizi365.com!"
	
	// Mesajı gönderme
	err = ch.Publish(
		"tizi365_direct",     // Değişim (değişim adı)
		"blog",               // Yönlendirme anahtarı, mesajınızın hangi kuyruğa gönderileceğini belirleyen kritik bir parametre
		false,                // Zorunlu
		false,                // Hemen
		amqp.Publishing {
			ContentType: "text/plain",   // Mesaj içerik türü, bu durumda düz metin
			Body:        []byte(body),    // Mesaj içeriği
		})

4. Tüketici Mesaj Alma

4.1. Değişime Bağlama

// İşlem yapılacak kuyruğun bildirilmesi
q, err := ch.QueueDeclare(
  "",     // Kuyruk adı, belirtilmezse rastgele bir ad oluşturulur
  false,  // Kalıcı kuyruk
  false,  // Kullanılmadığında sil
  true,   // Özel
  false,  // Bekleme yok
  nil,    // Argümanlar
)

// Kuyruğun belirtilen değişime bağlanması
err = ch.QueueBind(
  q.Name,             // Kuyruk adı
  "blog",             // Yönlendirme anahtarı, mesaj gönderirken belirtilen yönlendirme parametresiyle eşleşirse, mesaj mevcut kuyruğa iletilir
  "tizi365_direct",   // Değişim adı, mesaj gönderenin sonunda tanımlanan değişimle uyumlu olmalıdır
  false,
  nil)

4.2. Mesajları Tüketme

// Tüketici oluşturma
msgs, err := ch.Consume(
  q.Name, // Önceki kuyruk adına referans
  "",     // Tüketici adı, doldurulmazsa rastgele bir tane oluşturulur
  true,   // Kuyruk tarafından işlenen mesajları otomatik olarak kabul etme
  false,  // Özel
  false,  // Yerel yok
  false,  // Bekleme yok
  nil,    // Argümanlar
)

// Kuyruktaki mesajları tüketmek için döngü
for d := range msgs {
  log.Printf("Alınan mesaj=%s", d.Body)
}