Golang RabbitMQ Routing Pattern

रैबिटएमक्यू में रूटिंग पैटर्न पब्लिश-सब्सक्राइब पैटर्न के आधार पर एक्सचेंज रूटिंग विधि को बढ़ाता है। रूटिंग पैटर्न के लिए एक्सचेंज प्रकार सीधा है, जो रैबिटएमक्यू के लिए डिफ़ॉल्ट एक्सचेंज भी है। पिछले खंडों में, एक प्रकट एक्सचेंज का उपयोग नहीं किया गया था, लेकिन उपयोगकर्ता एक्सचेंज वास्तविक रूप से एक सीधे एक्सचेंज था।

सुझाव: यदि आप रूटिंग पैटर्न नियमों से अनवरत हैं, तो कृपया रैबिटएमक्यू रूटिंग पैटर्न को पढ़ें।

1. पूर्वापेक्षात्मक ट्यूटोरियल

कृपया पहले गोलैंग रैबिटएमक्यू पब्लिश-सब्सक्राइब पैटर्न के अध्याय को पढ़ें। मुख्यतः, रैबिटएमक्यू के विभिन्न कार्य पद्धतियाँ विभिन्न प्रकार के एक्सचेंज के द्वारा कार्यान्वित की जाती हैं। कोड लगभग समान है, मुख्य अंतर एक्सचेंज की परिभाषा होती है। इसलिए, एक बार पब्लिश-सब्सक्राइब पैटर्न समझ लिया जाए, तो अन्य पैटर्न बहुत ही सरल हो जाते हैं।

2. सीधा एक्सचेंज का घोषणा करना

err = ch.ExchangeDeclare(
  "tizi365_direct", // एक्सचेंज नाम, अनुकरण करना चाहिए
  "direct",         // एक्सचेंज प्रकार
  true,             // टिकाऊ
  false,            // स्वचालित रूप से मिटाया गया
  false,            // आंतरिक
  false,            // नहीं रुकें
  nil,              // तर्क
)

3. संदेश भेजना

	// संदेश सामग्री
	body := "नमस्ते Tizi365.com!"
	
	// संदेश को भेजना
	err = ch.Publish(
		"tizi365_direct",     // एक्सचेंज (एक्सचेंज नाम)
		"blog",               // रूटिंग की, एक महत्वपूर्ण पैरामीटर जो तय करता है कि आपका संदेश किस कतार में भेजा जाएगा
		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,             // कतार का नाम
  "blog",             // रूटिंग की, यदि यह संदेश भेजने के समय निर्दिष्ट किया गया है, तो संदेश वर्तमान कतार में पहुंचाया जाता है
  "tizi365_direct",   // एक्सचेंज नाम, जो संदेश भेजने वाले के एंड पर परिभाषित भी होना चाहिए
  false,
  nil)

4.2. संदेश का उपभोक्ता बनाना

// उपभोक्ता बनाना
msgs, err := ch.Consume(
  q.Name, // पहले के कतार का संदर्भ
  "",     // उपभोक्ता नाम, यदि भरा नहीं गया है, तो एक यादृच्छिक नाम उत्पन्न हो जाएगा
  true,   // स्वचालित रूप से संदेश सामग्री को संसोधित करने की पुष्टि करना
  false,  // वैशिष्ट्यपूर्ण
  false,  // स्थानीय नहीं
  false,  // नहीं रुकें 
  nil,    // तर्क
)

// कतार में संदेश उपभोग करने के लिए लूप चलाना
for d := range msgs {
  log.Printf("संदेश प्राप्त हुआ=%s", d.Body)
}