गोलैंग RabbitMQ का सरल कत्तर मोड

गोलैंग RabbitMQ

स्पष्टीकरण: P निर्माता को प्रतिबिंबित करता है, C उपभोक्ता को प्रतिबिंबित करता है, और लाल रंग में कत्तर को प्रतिबिंबित करता है।

ध्यान दें: यदि आप RabbitMQ से परिचित नहीं हैं, तो कृपया पहले रैबिटएमक्यू मूल अवधारणाएँ अनुभाग पढ़ें।

1. विभिन्नताएँ स्थापित करें

go get github.com/streadway/amqp

आवश्यकता पैकेज को आयात करें

import (
  "github.com/streadway/amqp"
)

2. संदेश भेजें

निम्नलिखित चरण संदेश निर्माता को संदेश नापूर्ति कैसे पूरी करता है, उसे दर्शाते हैं।

2.1. रैबिटएमक्यू सर्वर से कनेक्ट करें

// रैबिटएमक्यू सर्वर से कनेक्ट करें
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
defer conn.Close()

कनेक्शन पता व्याख्या:

amqp://उपयोगकर्ता:पासवर्ड@रैबिटएमक्यूपता:पोर्ट/

2.2. एक चैनल बनाएँ

अधिकांश कार्रवाइयाँ चैनल पर की जाती हैं।

ch, err := conn.Channel()
defer ch.Close()

2.3. कत्तर की घोषणा करें

उस कत्तर को प्रतिबिंबित करता है जिसे हमें पढ़ना या लिखना है।

q, err := ch.QueueDeclare(
  "hello", // कत्तर का नाम
  false,   // संदेश स्थायित्व
  false,   // जब उपयोग में नहीं होता है, तो कत्तर को हटाएं
  false,   // विशेष
  false,   // कोई प्रतीक्षा न करें
  nil,     // विधियाँ
)

2.4. संदेश प्रेषित करें

// संदेश सामग्री
body := "नमस्ते दुनिया!"

// संदेश प्रेषित करें
err = ch.Publish(
  "",     // विनिमय (यहाँ अनदेखी करें)
  q.Name, // मार्गनिर्देशक पैरामीटर, कत्तर का नाम मार्गनिर्देशक पैरामीटर के रूप में प्रयोग करें
  false,  // अनिवार्य
  false,  // तत्काल
  amqp.Publishing {
    ContentType: "text/plain",
    Body:        []byte(body),  // संदेश सामग्री
  })

2.5. संदेश भेजने के लिए पूर्ण कोड

package main

// पैकेज आयात करें
import (
	"log"
	"github.com/streadway/amqp"
)

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

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

	// एक चैनल बनाएँ
	ch, err := conn.Channel()
	failOnError(err, "चैनल खोलने में विफल रहा")
	defer ch.Close()

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

	// भेजने के लिए संदेश सामग्री
	body := "नमस्ते दुनिया!"

	// संदेश भेजें
	err = ch.Publish(
		"",     // विनिमय
		q.Name, // मार्गनिर्देशक
		false,  // अनिवार्य
		false,  // तत्काल
		amqp.Publishing{
			ContentType: "text/plain",
			Body:        []byte(body),
		})
	failOnError(err, "संदेश भेजने में विफल रहा")
	log.Printf(" [x] %s भेजा गया", body)
}

3. संदेश प्राप्त करना

संदेश प्राप्त करने के पहले तीन कदम भेजने संदेश के तुलनात्मक हैं, जो कि अनुक्रम 2.1, 2.2, और 2.3 को अनुसरण करते हैं। संदेश प्राप्त करने के लिए पूरा कोड निम्नलिखित है:

package main

// पैकेज आयात करें
import (
	"log"
	"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()

	// एक चैनल बनाएँ
	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,   // क्या स्वचालित रूप से संदेश की स्वीकृति करनी है, अर्थात, स्वचालित रूप से RabbitMQ को सूचित करें कि संदेश को सफलतापूर्वक प्रसंस्कृत किया गया है
		false,  // विशेष
		false,  // स्थानीय नहीं
		false,  // कोई प्रतीक्षा नहीं
		nil,    // तत्व
	)
	failOnError(err, "एक उपभोक्ता का पंजीकरण करने में विफल रहा")
	
	// कतार से संदेश पाएँ एक लूप में
	for d := range msgs {
		// संदेश सामग्री प्रिंट करें
		log.Printf("एक संदेश प्राप्त हुआ: %s", d.Body)
	}
}