র্যাবিটএমকিউ (RabbitMQ) এ, অবস্থা মৃত পত্র (যা ম্যাসেজ কনসিউমাররা প্রসেস করতে পারে না) যখন একটি কিউতে হয়, তখন এটি পুনরায় অন্য এক্সচেঞ্জে রিরুট হয়, যা আমরা মৃত পত্র এক্সচেঞ্জ বলে এখানে। মৃত পত্র এক্সচেঞ্জ তারপর মৃত পত্রকে একটি কিউতে পৌঁছায়, যা হল মৃত পত্র কিউ।

মৃত পত্র কিউ প্রদর্শন

মৃত পত্র কিউ

উপরের চিত্রায়ণ মৃত পত্রের উৎপত্তি থেকে তাদের হ্যান্ডলিং এর সার্বিক পদক্ষেপ ব্যাখ্যা করে।

মৃত পত্র উৎপত্তি

মৃত পত্রের উৎপত্তির শর্তগুলি নিম্নলিখিত হল:

  • ম্যাসেজটি কনসিউমার দ্বারা ম্যানুয়ালি অস্বীকৃত (বেসিক.reject / বেসিক.ন্যাক), এবং requeue = মিথ্যা।
  • ম্যাসেজের সময়-প্রতি জীবন (TTL) মেয়াদ শেষ হয়ে যায়।
  • কিউটি সর্বোচ্চ দৈর্ঘ্য পৌছে গেছে।

মৃত পত্র কিউ সম্পর্কিত হ্যান্ডলিং পদক্ষেপ

  1. মৃত পত্র এক্সচেঞ্জ সংজ্ঞায়িত করুন (নামের বিভাজন না অনুযায়ী, এটি শুধুমাত্র একটি নিয়মিত এক্সচেঞ্জ, এটি মৃত পত্র হ্যান্ডলিং সংদর্ভে মাত্র এই নাম দেওয়া হয়)।
  2. মৃত পত্র এক্সচেঞ্জ পরিবেশনায় বাইন্ড করার জন্য একটি কিউ সংজ্ঞায়িত করুন (এই কিউটি মৃত পত্র কিউ হয়, এবং এটি এও একটি নিয়মিত কিউ)।
  3. মৃত পত্র কনসিউমার সংজ্ঞায়িত করুন যাতে মৃত পত্র কিউ হ্যান্ডেল করা যায় (নামের বিভাজন না অনুযায়ী, এটি এও শুধুমাত্র একটি নিয়মিত কনসিউমার)।
  4. মৃত পত্র এক্সচেঞ্জকে নির্দিষ্ট কিউর সাথে বাইন্ড করুন (মৃত পত্র সেবা করা দরকার কিউটি বাইন্ড করা উচিত)।

কৌটিপ: প্রিন্সিপ জানতে উপরের চিত্রায়ণে সনাক্ত করুন। সব প্রোগ্রামিং ভাষায় মৃত পত্র কিউ এর হ্যান্ডেলিং একই ভাবে করে।

গোলাং-এ মৃত পত্র কিউ হ্যান্ডেলিং

1. মৃত পত্র এক্সচেঞ্জ সংজ্ঞায়িত করুন

এটি একটি সাধারণ এক্সচেঞ্জের মত সংজ্ঞায়িত করুন।

// কিউ সংজ্ঞায়ন করুন
err = ch.ExchangeDeclare(
    "tizi365.dead",   // এক্সচেঞ্জের নাম
    "topic", // এক্সচেঞ্জের ধরন
    true,     // ট্রান্সপোর্ট
    false,
    false,
    false,
    nil,
)

2. মৃত পত্র কিউ সংজ্ঞায়ন করুন

এটি একটি সাধারণ কিউর মত সংজ্ঞায়ন করুন।

    // কিউ সংজ্ঞান করুন
    q, err := ch.QueueDeclare(
        "",    // কিউর নাম, একটি যাবোগান্ধভাবে তৈরি করার জন্য খালি রাখুন
        false, // ট্রান্সপোর্ট কিউ
        false,
        true,
        false,
        nil,
    )

    // কিউকে মৃত পত্র এক্সচেঞ্জে বাইন্ড করুন
    err = ch.QueueBind(
        q.Name, // কিউর নাম
        "#",     // রাউটিং কী, # মানে সমস্ত রাউটিং কী মেটচ করে, অর্থাৎ সমস্ত মৃত পত্র ম্যাসেজ পেতে
        "tizi365.dead", // মৃত পত্র এক্সচেঞ্জের নাম
        false,
        nil)

কৌটিপ: মৃত পত্র কিউকে একটি নিয়মিত কিউ হিসেবে চিন্তা করুন।

3. মৃত পত্র কনসিউমার সংজ্ঞায়িত করুন

// একটি কনসিউমার তৈরি করুন
msgs, err := ch.Consume(
    q.Name, // আগের মৃত পত্র কিউর নামের উপর সনাক্ত করুন
    "",     // কনসিউমারের নাম, যদি প্রদান না করা হয়, একটি যাবোগান্ধভাবে তৈরি হবে
    true,   // ম্যাসেজ প্রসেসিং এর অটো-ম্যানডিকে অ্যাকনালেজমেন্ট
    false, 
    false, 
    false, 
    nil,
)

// মৃত পত্র কিউ থেকে ম্যাসেজ খেতে লুপ চালান
for d := range msgs {
    log.Printf("Received dead letter message=%s", d.Body)
}

4. মৃত পত্র এক্সচেঞ্জকে নির্দিষ্ট কিউতে বাইন্ড করুন

	// কিউ বৈশিষ্ট্য
	props := make(map[string]interface{})
	// মৃত পত্র এক্সচেঞ্জে বাইন্ড করুন
	props["x-dead-letter-exchange"] = "tizi365.dead"
	// ঐচ্ছিক: যদি মৃত পত্রটি মৃত পত্র এক্সচেঞ্জে প্রেরণ করা হয়, তবে রাউটিং কীটি নির্দিষ্ট করুন। যদি সেট না করা হয়, তবে মূল ম্যাসেজের রাউটিং কীটি ব্যবহৃত হবে।
	// props["x-dead-letter-routing-key"] = "www.tizi365.com"

	q, err := ch.QueueDeclare(
		"tizi365.demo.hello", // কিউর নাম
		true,   // ট্রান্সপোর্ট
		false, 
		false, 
		false,   
		props,     // কিউর বৈশিষ্ট্য সেট করুন
	)

এভাবে, যদি tizi365.demo.hello কিউর ম্যাসেজ মৃত পত্র হয়, তবে তারা tizi365.dead মৃত পত্র এক্সচেঞ্জে ফরোয়ার্ড করা হবে।