گولانگ ریبٹ ایم‌کیو راوٹنگ پیٹرن

ریبٹ ایم‌کیو میں راوٹنگ پیٹرن پبلش-سبسکرائب پیٹرن کی بنیاد پر ایکسچینج راوٹنگ ترتیب کو بڑھاتا ہے۔ راوٹنگ پیٹرن کے لئے ایکسچینج قسم ڈائریکٹ ہوتی ہے، جو کہ ریبٹ ایم‌کیو کا ڈیفالٹ ایکسچینج ہے۔ پچھلے حصوں میں، ایک صریح ایکسچینج استعمال نہیں کیا گیا تھا، مگر استعمال ہونے والا ایکسچینج حقیقت میں ایک ڈائریکٹ ایکسچینج تھا۔

نصیحت: اگر آپ راوٹنگ پیٹرن کے قواعد سے آگاہ نہیں ہیں، تو براہ کرم ریبٹ ایم‌کیو راوٹنگ پیٹرن کا مطالعہ کریں۔

1. پہلے سیکھنے کی ضرورت

براہ کرم پہلے گولانگ ریبٹ ایم‌کیو پبلش-سبسکرائب پیٹرن کے باب کا مطالعہ کریں۔ مصراع ریبٹ ایم‌کیو کی مختلف کام کرنے کے اندازات کو مختلف قسم کے ایکسچینجز سے پیش کیا جاتا ہے۔ کوڈ تقریباً وہی ہوتا ہے، بصورت ذیل فرق ہوتا ہے ایکسچینج کی تعریف میں۔ لہذا، ایک بار پبلش-سبسکرائب پیٹرن سمجھ لیا گیا ہو تو، دیگر پیٹرنز بھی کافی آسان ہوتے ہیں۔

2. ایک ڈائریکٹ ایکسچینج کا اعلان کرنا

err = ch.ExchangeDeclare(
  "tizi365_direct", // ایکسچینج نام، یکتا ہونا ضروری ہے
  "direct",         // ایکسچینج قسم
  true,             // مستحکم
  false,            // خودبخود حذف ہونے کی صلاحیت
  false,            // اندرونی
  false,            // منتظر نہیں ہوں
  nil,              // ارگومنٹس
)

3. پیغامات بھیجنا

	// پیغام کا مواد
	body := "Hello 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("Received message=%s", d.Body)
}