Golang RabbitMQ کا سادہ قطار حالت

Golang RabbitMQ

تفسیر: P منتج ہوتا ہے، C استعمال کرنے والا ہوتا ہے، اور لال رنگ قطار کو ظاہر کرتا ہے۔

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

1. وابستگیاں انسٹال کریں

go get github.com/streadway/amqp

وابستگی پیکیج درآمد

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

2. پیغامات بھیجیں

نیچے دی گئی اقدامات واضح کرتی ہیں کہ پیغام منتج کیسے بھیجتا ہے۔

2.1. RabbitMQ سرور کے ساتھ منسلک ہوں

// RabbitMQ سرور کے ساتھ منسلک ہوں
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
defer conn.Close()

کنکشن کا پتہ بتانا:

amqp://صارف_نام:پاس ورڈ@RabbitMQ_پتہ:پورٹ/

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() {
	// 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, "قطار کا اعلان ناکام رہا")

	// بھیجنے کے لئے پیغام کا مواد
	body := "ہیلو ورلڈ!"

	// پیغام بھیجیں
	err = ch.Publish(
		"",     // ایکسچینج
		q.Name, // راوٹنگ کی چابی
		false,  // ضروری
		false,  // فوری
		amqp.Publishing{
			ContentType: "text/plain",
			Body:        []byte(body),
		})
	failOnError(err, "پیغام بھیجنے میں ناکام رہا")
	log.Printf(" [x] Sent %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() {
	// ریبٹ ایم کیو سے منسلک ہوں
	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, "قیو کا اعلان ناکام رہا")

	// ایک پیغام کنسیومر بنائیں
	msgs, err := ch.Consume(
		q.Name, // قیو کا نام
		"",     //  کنسیومر کا نام، اگر نہیں بھرا ہوا ہو تو اتومیٹک طور پر ایک یونیک ID بنایا جائے گا
		true,   // کیا پیغامات کو خود بخود تسلیم کیا جائے یعنی خود بخود RabbitMQ کو بتایا جائے کہ پیغام کو کامیابی سے پروسیس کر لیا گیا ہے
		false,  // خصوصی
		false,  // مقامی
		false,  // نوائیٹ
		nil,    // ارگومنٹس
	)
	failOnError(err, "کنسیومر رجسٹر کرنے میں ناکام رہا")
	
	// قیو سے پیغامات کو حلقے میں لینا
	for d := range msgs {
		// پیغام کا مواد پرنٹ کریں
		log.Printf("پیغام ملا: %s", d.Body)
	}
}