Golang RabbitMQ রাউটিং প্যাটার্ন

RabbitMQ-এর রাউটিং প্যাটার্ন পাবলিশ-সাবস্ক্রাইব প্যাটার্নের উপর ভিত্তি করে এক্সচেঞ্জ রাউটিং পদ্ধতি প্রসারিত করে। রাউটিং প্যাটার্নের জন্য এক্সচেঞ্জ টাইপটি ডাইরেক্ট, যা আসলে RabbitMQ-র ডিফল্ট এক্সচেঞ্জ হিসেবে কাজ করে। পূর্ববর্তী বিভাগগুলিতে, স্পষ্ট এক্সচেঞ্জ ব্যবহার করা হয়নি, তবে অধীনের এক্সচেঞ্জটি বাস্তবে একটি ডাইরেক্ট এক্সচেঞ্জ ব্যবহার করে।

টিপ: আপনি যদি রাউটিং প্যাটার্নের নিয়মগুলির জন্য অপরিচিত হন, তবে দয়া করে RabbitMQ রাউটিং প্যাটার্ন পড়ুন।

1. প্রয়োজনীয় টিউটোরিয়াল

দয়া করে প্রথমে Golang RabbitMQ পাবলিশ-সাবস্ক্রাইব প্যাটার্ন অধ্যায়টি পড়ুন। মূলত, RabbitMQ-র বিভিন্ন কর্মযোগ্যতা বিভিন্ন ধরণের এক্সচেঞ্জ দ্বারা সাক্ষাতকৃত হয়। কোডটি প্রায় একই, প্রধান পার্থক্যটি হল এক্সচেঞ্জের সংজ্ঞা। তাই, একবার পাবলিশ-সাবস্ক্রাইব প্যাটার্ন বুঝে গেলে, অন্যান্য প্যাটার্নগুলি খুবই সহজ হয়ে যায়।

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)
}