Golang RabbitMQ कार्य मोड, कई उपभोक्ताओं द्वारा संयुक्त उपभोग प्राप्त करना।

गोलैंग कार्य कतार

स्पष्टीकरण: P उत्पादक को प्रस्तुत करता है, C1 और C2 उपभोक्ताओं को प्रस्तुत करते हैं, और लाल रंग कतार को प्रस्तुत करता है।

सूचना: प्रत्येक संदेश केवल एक उपभोक्ता द्वारा प्राप्त किया जा सकता है।

पूर्व-ट्यूटोरियल

कृपया पहले Golang RabbitMQ Quick Start Tutorial पढ़ें ताकि गोलैंग में RabbitMQ पर मूल ऑपरेशन को समझ सकें। यदि आप RabbitMQ से अनजान हैं, तो कृपया पहले चरणों को पढ़ें।

संयुक्त उपभोग

गोलैंग मुख्यत: बहुतायत उपभोक्ताओं को कार्यान्वित करने के लिए गोरूटाइन्स का उपयोग करता है, नीचे कई उपभोक्ताओं का कार्यान्वयन है।

सूचना: संदेश भेजने के लिए कैसे करें, कृपया Golang RabbitMQ Quick Start Tutorial का संदर्भ देखें।

package main

import (
	"log"
	"time"

	"github.com/streadway/amqp"
)

// त्रुटि संरक्षण
func failOnError(err error, msg string) {
	if err != nil {
		log.Fatalf("%s: %s", msg, err)
	}
}

func main() {
	// RabbitMQ से कनेक्ट करें
	conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
	failOnError(err, "RabbitMQ से कनेक्ट करने में विफल रहा")
	defer conn.Close()

	// गोरूटाइनस के माध्यम से 5 उपभोक्ताओं को बनाएं
	for i := 0; i < 5; i++ {
		go func(number int) {
			// प्रत्येक उपभोक्ता के लिए एक खरगोश चैनल बनाएं
			ch, err := conn.Channel()
			failOnError(err, "चैनल खोलने में विफल रहा")
			defer ch.Close()

			// संचालित करने के लिए कतार घोषित करें
			q, err := ch.QueueDeclare(
				"hello", // कतार नाम
				false,   // टिकाऊ
				false,   // अप्रयोग में न होने पर हटाएं
				false,   // विशेष
				false,   // कोई प्रतीक्षा नहीं करें
				nil,     // तर्क
			)
			failOnError(err, "कतार घोषणा करने में विफल रहा")

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

			// एक लूप में संदेश प्रसंस्करण करें
			for d := range msgs {
				log.Printf("[उपभोक्ता संख्या=%d] संदेश प्राप्त हुआ: %s", number, d.Body)
				// व्यापार प्रसंस्करण के प्रसंस्करण को संरक्षित करें, 1 सेकंड के लिए सोते रहें
				time.Sleep(time.Second)
			}
		}(i)
	}

	// मुख्य गोरूटाइन को कार्यक्रम से बाहर निकलने से रोकने के लिए
	forever := make(chan bool)
	<-forever
}

सूचना: RabbitMQ द्वारा उपयोग किए जाने वाले एक्सचेंज के प्रकार के बावजूद, कटारों में कई उपभोक्ता हो सकते हैं, और इस उदाहरण में जैसे ही कई उपभोक्ताएँ शुरू होती हैं, वैसे ही शुरू करने का तरीका होता है।