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