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