Golang کا RabbitMQ ٹاپک موڈ راستہ پارسکو کے ساتھ مشابہ ہے، سب سے بڑی فرق یہ ہے کہ ٹاپک موڈ میں راستہ پارسکو کے پیرامیٹرات فضا وقتی مطابقت کی مساعدت کرتے ہیں۔ ٹاپک موڈ کے لئے ایکسچینج قسم 'ٹاپک' ہوتی ہے۔

ٹاپک موڈ کی تعمیر درج زیل ہے: RabbitMQ Topic Mode

نوٹ: اگر آپ RabbitMQ topic mode سے واقف نہیں ہیں، تو براہ کرم RabbitMQ ٹاپک موڈ سیکشن پہلے پڑھیں۔

1. پیش شرط سیکشن

براہ کرم مندرجہ زیل ترتیب میں مواد پڑھیں:

نوٹ: کیونکہ Golang RabbitMQ publish/subscribe سیکشن میں پورے کوڈ کے مثالیں موجود ہیں، صرف ایکسچینج کی تعریف اور راستہ پارسکو کے پیرامیٹرات دیگر RabbitMQ موڈز کے لئے مختلف ہیں۔ لہذا صرف کلیدی کوڈ دکھایا جاتا ہے۔

2. ٹاپک ایکسچینج کی تشریح

err = ch.ExchangeDeclare(
  "tizi365_topic", // ایکسچینج کا نام، یہ یکتا ہونا چاہئے
  "topic",         // ایکسچینج کی قسم
  true,            // مستحکم
  false,           // خود بخود حذف ہونے والا
  false,           // انٹرنل
  false,           // انتظار نہیں
  nil,             // ارگومنٹس
)

3. پیغامات بھیجنا

    // مواد پیغام
    body := "ہیلو Tizi365.com!"

    // پیغام بھیجیں
    err = ch.Publish(
        "tizi365_topic",      // ایکسچینج کا نام
        "www.tizi365.com",    // راستہ پارسکو، پیغام کو کس قیف (queue) میں بھیجا جائے گا، یہ اہم پیرامیٹر ہے
        false,                // ضروری
        false,                // فوری
        amqp.Publishing {
            ContentType: "text/plain", // پیغام کی قسم، یہاں یہ سادہ مواد ہے
            Body:        []byte(body),  // پیغام کی مواد
        })

4. پیغامات استعمال کرنا

4.1. ایکسچینج کو بائنڈ کرنا

// کیو پرائم سینکو پریشانک ہونے تک  میں درج زیل قطع بندی کریں
    q, err := ch.QueueDeclare(
        "",    // کیو کا نام، اگر نہیں دیا گیا تو رینڈم طریقے سے پیدا ہو جائے گا
        false, // مستحکم کیو
        false, // استعمال نہیں ہونے پر حذف کریں
        true,  // خصوصی
        false, // انتظار نہیں
        nil,   // ارگومنٹس
    )

    // کیو کو مخصوص ایکسچینج سے بائنڈ کریں
    err = ch.QueueBind(
        q.Name,             // کیو کا نام
        "*.tizi365.com",    // راستہ پارسکو، ایک لفظ کے مطابقت کے لئے * استعمال ہوتا ہے، اگر # استعمال ہوتا ے، تو کئی لفظوں کے مطابقت کرے گا
        "tizi365_topic",    // ایکسچینج کا نام، بھیجنے والے کی تعریف کے ایکسچینج سے مطابقت ہونی چاہئے
        false,
        nil)

4.2. پیغامات کا بنیادی دیکھ بھال کرنا

// ایک کنیومروں کا تخلیق کریں
    msgs, err := ch.Consume(
        q.Name, // اوپر دی گئی کیو کا نام
        "",     // کنسیومر کانم، اگر نہیں دیا گیا تو خود بخود پیدا ہو جائے گا
        true,   // خود بخود تسلیم کرادینا کیو کو جس پیغامات کا بنیادی دیکھ بھال کی گئی ہے
        false,  // خصوصی
        false,  // مقامی نہیں
        false,  // انتظار نہیں
        nil,    // آرگومنٹس
    )

    // قیو کی اندر آنے والے پیغامات کے ساتھ گزرنا
    for d := range msgs {
        log.Printf("مواد موصول ہوا=%s", d.Body)
    }