র‌্যাবিটএমকিউ (RabbitMQ) অবিশ্বাস্য বার্তা সমর্থন করে না। বর্ত‌্যমানে, প্রধান প্রযুক্তিগল্পের মধ্যে মৃত-বর্ত্তী বিনিম‌্যমে + বার্ত্তা TTL পদ্ধতি বা rabbitmq-delayed-message-exchange প্লাগিন ব্যাবহার করা হচ্ছে।

মন্তব্যা-সময়ার জন্য বিবেচনা

  • বার্ত্তা উন্মুক্ত করার জন্য যেহেতু সময় উৎপাদন এবং গ্রহণের জন্য সময় খিচুয়ে নেয়। উদাহরণস্বরূপ, ই-মালায় লেনদেনে, একটি অবস্থা রয়েছে যেখানে অর্ডারগুলি একটি টাইমআউট পরে বন্ধ হয় যদি পেমেন্ট সমাপ্ত না হয়। এ ক্ষেত্রে, একটি দিনগুলি মৃত-বর্ত্তী পাঠানো হয় যখন অর্ডারটি তৈরি হয়। এই বার্ত্তা ব্যবহারকারীকে 30 মিনিট পর পৌঁছানো হবে, এবং ব্যবহারকারীতে পরীক্ষা করতে হবে পরিস্থিত অর্ডারটি পেইড করা হয় নাকি না। যদি পেমেন্ট সমাপ্ত না হয় তাহলে অর্ডারটি বন্ধ হয়; যদি পেমেন্ট সমাপ্ত হয় তাহলে বার্তা উপেক্ষা করা হয়।
  • বার্তা-কার্যরত ফিল্ডগুলি যেহেতু বার্তা দ্বারা ট্রিগার করা হয়। উদাহরণস্বরূপ, নির্দিষ্ট সময়সীমা পরে ব্যবহারকারীদের কাছে রিমাইন্ডার বার্তা পাঠানো।

মৃত-বর্ত্তী বিনিম‌্যমে + বার্ত্তা TTL পদ্ধতি

এই পদ্ধতির মধ্যে মূল ধারণা হল বিনিমা‌্যমে বিন্যস্ত অতিরিক্ত কিউ তৈরি করে এবং বার্তা মেয়াদ উত্তীর্ণ সময় (TTL) ব্যাবহার করা। যখন একটি বার্তা মেয়াদ উত্তীর্ণ হয়, তার জন্য একটি মৃত-বার্ত্তা হয়, যা একটি মৃত-বর্ত্তটির মৌলিক আউটকাস্টে পথ পেরিয়ে পেয়েোথ পৌঁছানো হয়, এবং তারপর একটি মৃত-বার্ত্তা কিউ, যা খাওয়ানো যায়।

এই পদ্ধতিতে বার্তার মেয়াদ উত্তীর্ণতা ম্যাসেজের দেয়ারক্ষাস্থান হিসাবে কাজ করে। উদাহরণস্বরূপ, যদি ম্যাসেজ TTL 30 সেকেন্ড ধরে সিটি এবং কিউর জন্য কোন ব্যবহারকারী না থাকে, তাহলে ম্যাসেজটি 30 সেকেন্ড পর মেয়াদ উত্তীর্ণ হবে এবং একটি মৃত-বর্ত্ত্টা হয়, যা মৃত-বার্ত্তা কিউয়ে অনুযায়ী নিয়োন্ত্রণ করা হবে।

এই পদ্ধতিটি পরিচালিত করতে প্রপার্টিসগুলো নির্ধারণ করা দরকার যেমন নিম্নলিখিত দুটি টিউরিয়ালে বর্ণিত হয়:

বিলম্বিত বার্ত্তা প্লাগিন সমাধান

১। প্লাগিন ইনস্টল করা

rabbitmq-delayed-message-exchange GitHub সংগ্রহস্থল:

https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases

GitHub সংগ্রহপৃষ্ঠার এ্যাসেট অংশ থেকে rabbitmq_delayed_message_exchange-3.8.9-0199d11c.ez ফাইলটি ডাউনলোড করুন এবং এই ফাইলটি র‌্যাবিটএমকিউ প্লাগিন নির্দেশিত ডিরেক্টরিতে স্থানান্তর করুন (প্লাগিন ডিরেক্টরি)।

লক্ষ্য: সংস্করণ সংখ্যা এই টিউটোরিয়ালে উল্লেখিত সংস্করণ সংখ্যাটির থেকে ভিন্ন হতে পারে। যদি আপনার র‌্যাবিটএমকিউ সর্বশেষ সংস্করণ ব্যাবহার করেন, তাহলে প্লাগিনের সর্বশেষ সংস্করণটি এলাকা মধ্যে চয়ন করুন।

২। প্লাগিন চালু করা

rabbitmq-plugins enable rabbitmq_delayed_message_exchange

৩। এক্সচেঞ্জ সংজ্ঞায়িত করা

বিলম্বিত বার্ত্তা প্রেরণের সমর্থকের প্রজন্ন বিনিয়োগ গুণসূচকসহ কাস্টম এক্সচেঞ্জ প্রপার্টি নির্ধারণ করুন।

props := make(map[string]interface{})
// বিলম্বিত বার্ত্তা প্রেরণ সমর্থক হিসাবে কী প্যারামিটার
props["x-delayed-type"] = "direct"

// এক্সচেঞ্জ ঘোষণা করুন
err = ch.ExchangeDeclare(
"বিলম্বিত.কিউ", // এক্সচেঞ্জের নাম
"ফ্যানআউট",      // এক্সচেঞ্জের ধরণ
true,          // টুরী
false,
false,
false,
props,         // সেট প্রপার্টিস
)

৪। বার্ত্তা বিলম্বিত প্রেরণ

বার্ত্তা বিলম্বের স সমর্থন করে ম্যাসেজ পরিশোধ "x-delay" হেডার ব্যবহার করুন।

msgHeaders := make(map[string]interface{})
// মেসেজের মেয়াদ নিশ্চিত করুন বার্তা হেডার ব্যবহার করে, মিলিসেকেন্ডে
msgHeaders["x-delay"] = 6000

err = ch.Publish(
"বিলম্বিত.কিউ", // এক্সচেঞ্জের নাম
"",            // রাউটিং প্যারামিটার
false,
false,
amqp.Publishing{
Headers: msgHeaders,   // ম্যাসেজ হেডার সেট করুন
ContentType: "টেক্সট/প্লেন",
Body: []byte(body),
})

লক্ষ্য: আপনি যদি আলিবাবা ক্লাউডের র‌্যাবিটএমকিউ বার্তা সার্ভিসটি প্লাগিন ইনস্টল না করে সরাসরি ব্যবহার করেন, তাহলে বার্তা শিরোনামসহে (বিলম্বিত) বৈশিষ্ট্যিক যোগাযো ২঱ মেসেজের ভিতরে সমর্থন করা হয়। আলিবাবা ক্লাউড ইতিঝাদের‌্যাবিটএমকিউকে সমর্থন জনিত হিসাবে ব্যাবহার করা।