Golang RabbitMQ topic modu, yönlendirme moduna (Doğrudan) benzer ve en büyük farkı konu modundaki yönlendirme parametrelerinin belirsiz eşlemeyi desteklemesidir. Konu modu için borsa türü 'topic' tir.
Konu modunun mimarisi aşağıdaki gibidir:
Not: Eğer RabbitMQ konu modu hakkında bilgi sahibi değilseniz lütfen önce RabbitMQ konu modu bölümünü okuyun.
1. Ön Koşul Kılavuzu
Lütfen aşağıdaki bölümleri sırayla okuyun:
- RabbitMQ temel kavramlar bölümü
- RabbitMQ konu modu bölümü
- Golang RabbitMQ yayın/abone desenini uygulama bölümü
Not: Golang RabbitMQ yayın/abone bölümü zaten tam kod örneklerini içerdiği için, yalnızca diğer RabbitMQ modları için borsa tanımı ve yönlendirme parametreleri farklı olduğundan sadece temel kod gösterilmektedir.
2. Konu Borsasını Bildirme
err = ch.ExchangeDeclare(
"tizi365_topic", // Borsa adı, benzersiz olmalı
"topic", // Borsa türü
true, // Dayanıklı
false, // Otomatik silinme
false, // İç
false, // Bekleme yok
nil, // Argümanlar
)
3. Mesaj Gönderme
// Mesaj içeriği
body := "Merhaba Tizi365.com!"
// Mesajı yayınlama
err = ch.Publish(
"tizi365_topic", // Borsa adı
"www.tizi365.com", // Yönlendirme parametresi, 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ü, burada düz metin
Body: []byte(body), // Mesaj içeriği
})
4. Mesajları Tüketme
4.1. Borsa Bağlama
// İşletilecek kuyruğu bildir
q, err := ch.QueueDeclare(
"", // Kuyruk adı, doldurulmazsa rastgele oluşturulur
false, // Dayanıklı kuyruk
false, // Kullanılmadığında sil
true, // Özel
false, // Bekleme yok
nil, // Argümanlar
)
// Kuyruğu belirtilen borsaya bağlama
err = ch.QueueBind(
q.Name, // Kuyruk adı
"*.tizi365.com", // Yönlendirme parametresi, belirleyici bir parametre, wildcart * kullanarak bir kelime eşlemek, # kullanılırsa birden fazla kelime eşleşir
"tizi365_topic", // Borsa adı, mesaj gönderen tarafından tanımlanan borsa ile eşleşmesi gerekir
false,
nil)
4.2. Mesajları İşleme
// Tüketici oluşturma
msgs, err := ch.Consume(
q.Name, // Yukarıdaki kuyruk adına referans
"", // Tüketici adı, doldurulmazsa otomatik oluşturulur
true, // Mesajın işlendiğine ilişkin kuyruğa otomatik onay
false, // Özel
false, // Yerel değil
false, // Bekleme yok
nil, // Argümanlar
)
// Kuyruktaki mesajları tüketerek geçme
for d := range msgs {
log.Printf("Mesaj alındı=%s", d.Body)
}