गोलांग का RabbitMQ टॉपिक मोड सीधी मोड (डायरेक्ट) के तुलना में समान है, लेकिन टॉपिक मोड में रूटिंग पैरामीटर्स का समर्थन बहुरूपी भर करने की सर्वाधिक अंतर है। टॉपिक मोड के लिए एक्सचेंज प्रकार 'टॉपिक' है।
टॉपिक मोड का परिचय निम्नलिखित रूप में है:
ध्यान दें: अगर आप RabbitMQ टॉपिक मोड से अवगत नहीं हैं, तो कृपया सबसे पहले RabbitMQ टॉपिक मोड सेक्शन को पढ़ें।
1. पूर्वापेक्षित ट्यूटोरियल
कृपया निम्नलिखित सेक्शनों को क्रम में पढ़ें:
- RabbitMQ मौलिक अवधारणाएँ सेक्शन
- RabbitMQ टॉपिक मोड सेक्शन
- गोलांग RabbitMQ पब्लिश/सब्सक्राइब पैटर्न का अमलन सेक्शन
ध्यान दें: क्योंकि गोलांग RabbitMQ पब्लिश/सब्सक्राइब सेक्शन में पूरा कोड उदाहरण पहले से ही शामिल है, इसलिए केवल अन्य 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", // रूटिंग पैरामीटर, महत्वपूर्ण पैरामीटर जो आपके संदेश को किस क्यू में भेजा जाएगा का निर्धारण करता है
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)
}