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: RabbitMQ Konu Modu

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:

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