শুভ বিকাল, হাবর! আমি জ্ঞানের একটি পাঠ্যপুস্তক-রেফারেন্স বই শেয়ার করতে চাই যা আমি সংগ্রহ করতে পেরেছি RabbitMQ এবং সংক্ষিপ্ত সুপারিশ এবং উপসংহার মধ্যে ঘনীভূত.
বিষয়বস্তু সূচি
র্যাবিটএমকিউ। পার্ট 1. ভূমিকা. Erlang, AMQP এবং RPC
র্যাবিটএমকিউ। পার্ট 2. এক্সচেঞ্জ বোঝা
খরগোশ এমকিউ। পার্ট 3. সারি এবং বাঁধাই বোঝা
খরগোশ এমকিউ। পার্ট 4. বার্তা এবং ফ্রেম কি তা বোঝা
র্যাবিটএমকিউ। পার্ট 5: বার্তা কার্য সম্পাদন এবং প্রকাশ করা
খরগোশ এমকিউ। পার্ট 6. ফেডারেশন এবং বেলচা মডিউলের ওভারভিউ
খরগোশ এমকিউ। পার্ট 7. সংযোগ এবং চ্যানেল সম্পর্কে বিশদ বিবরণ
র্যাবিটএমকিউ। পার্ট 8. .NET-এ RabbitMQ
খরগোশ এমকিউ। পার্ট 9. মনিটরিং
AMQP সম্পর্কে সংক্ষেপে
AMQP (অ্যাডভান্সড মেসেজ কিউইং প্রোটোকল) সিস্টেমের উপাদানগুলির মধ্যে বার্তা প্রেরণের জন্য একটি উন্মুক্ত প্রোটোকল। মূল ধারণাটি হল যে পৃথক সাবসিস্টেম (বা স্বাধীন অ্যাপ্লিকেশন) একটি AMQP ব্রোকারের মাধ্যমে ইচ্ছামত বার্তা আদান-প্রদান করতে পারে যা রাউটিং সম্পাদন করে, সম্ভবত ডেলিভারি, ডেটা প্রবাহ বিতরণ, পছন্দসই ধরনের বার্তাগুলির সদস্যতা নিশ্চিত করে।
প্রোটোকল AMQP তিনটি ধারণা প্রবর্তন:
exchange (এক্সচেঞ্জ পয়েন্ট বা বিনিময়) - এটিতে বার্তা পাঠানো হয়। বিনিময় পয়েন্ট বার্তা বিতরণ করে এক বা একাধিক সারিতে। সে একটি সারিতে বার্তা রুট করে তৈরি লিঙ্কের উপর ভিত্তি করে (binding) এটি এবং সারির মধ্যে
queue (সারি) - ডিস্কে বা র্যামে একটি ডেটা স্ট্রাকচার, যা বার্তাগুলির লিঙ্কগুলি সঞ্চয় করে এবং বার্তাগুলির অনুলিপি দেয় consumers (ভোক্তাদের কাছে)
binding (আবদ্ধ) - একটি নিয়ম যে এক্সচেঞ্জ পয়েন্টকে বলে যে এই বার্তাগুলি কোন সারিতে পড়তে হবে৷
Erlang কোম্পানি দ্বারা উন্নত Ericsson 1980-এর দশকের মাঝামাঝি সময়ে 99,999% আপটাইম প্রয়োজন এমন অ্যাপ্লিকেশনগুলির জন্য একটি বিতরণ করা, ত্রুটি-সহনশীল, রিয়েল-টাইম সিস্টেম হিসাবে। Erlang বিভিন্ন শিল্প এবং আধুনিক অ্যাপ্লিকেশনে ব্যবহৃত হয়, উদাহরণস্বরূপ WhatsApp. আপনি নিবন্ধে আরো পড়তে পারেন হোয়াটসঅ্যাপ আর্কিটেকচার, যা ফেসবুক 19 বিলিয়ন ডলারে কিনেছে
সংক্ষেপে RabbitMQ সম্পর্কে
RabbitMQ একটি ওপেন সোর্স মেসেজ ব্রোকার। এটি প্রোটোকলের সমস্ত মৌলিক নীতি অনুসারে বার্তাগুলিকে রুট করে এএমকিউপি বর্ণিত বিশেষ উল্লেখ. RabbitMQ প্রোটোকল প্রয়োগ করে এবং পরিপূরক করে AMQP.
মেসেজিং মডেলের প্রাথমিক ধারণা RabbitMQ ব্যাপারটা হলো producer (প্রকাশক) সরাসরি সারিতে বার্তা পাঠায় না। প্রকৃতপক্ষে, এবং প্রায়শই, প্রকাশক এমনকি জানেন না যে বার্তাটি কোন সারিতে বিতরণ করা হবে কিনা।
পরিবর্তে, প্রকাশক শুধুমাত্র এক্সচেঞ্জে বার্তা পাঠাতে পারেন। একদিকে, এক্সচেঞ্জ প্রকাশকদের কাছ থেকে বার্তা গ্রহণ করে, এবং অন্যদিকে, এটি তাদের সারিগুলিতে পাঠায়। এক্সচেঞ্জ অবশ্যই প্রাপ্ত বার্তার সাথে ঠিক কী করতে হবে তা জানতে হবে। এটি একটি নির্দিষ্ট সারিতে যোগ করা উচিত? এটি একাধিক সারিতে যোগ করা উচিত? অথবা বার্তা উপেক্ষা করা উচিত.
সংক্ষেপে কাজ RabbitMQ নিম্নরূপ বর্ণনা করা যেতে পারে:
প্রকাশক একটি নির্দিষ্ট বিনিময় একটি বার্তা পাঠায়
এক্সচেঞ্জ, একটি বার্তা পাওয়ার পরে, এটি এবং সারির মধ্যে বাধ্যতামূলক নিয়ম অনুসারে এটিকে এক বা একাধিক সারিতে নিয়ে যায়
সারি এই বার্তাটির একটি লিঙ্ক সঞ্চয় করে৷ বার্তাটি নিজেই RAM বা ডিস্কে সংরক্ষণ করা হয়
ভোক্তা সারি থেকে একটি বার্তা পাওয়ার জন্য প্রস্তুত হওয়ার সাথে সাথে সার্ভার রেফারেন্সের মাধ্যমে বার্তাটির একটি অনুলিপি তৈরি করে এবং প্রেরণ করে
ভোক্তা বার্তাটি গ্রহণ করে এবং ব্রোকারের কাছে একটি স্বীকৃতি পাঠায়
ব্রোকার, নিশ্চিতকরণ পেয়ে, সারি থেকে বার্তাটির একটি অনুলিপি সরিয়ে দেয়। তারপর RAM থেকে এবং ডিস্ক থেকে মুছে দেয়
আরপিসি
প্রক্রিয়া RPC (দূরবর্তী পদ্ধতি কল) নিউক্লিয়াসের সাথে প্রায় সমস্ত মিথস্ক্রিয়াকে অন্তর্নিহিত করে RabbitMQ. উদাহরণস্বরূপ, সঙ্গে ক্লায়েন্ট শর্তাবলী প্রাথমিক আলোচনা RabbitMQ, একটি নির্দিষ্ট প্রক্রিয়া দেখায় RPC. এই ক্রমটি সম্পন্ন হলে, RabbitMQ ক্লায়েন্ট থেকে অনুরোধ গ্রহণ করতে প্রস্তুত হবে:
এছাড়াও স্পেসিফিকেশনে AMQP ক্লায়েন্ট এবং সার্ভার উভয়ই কমান্ড জারি করতে পারে। এর মানে হল যে ক্লায়েন্ট সার্ভারের সাথে ইন্টারঅ্যাক্ট করার জন্য অপেক্ষা করছে। কমান্ড হল ক্লাস এবং পদ্ধতি। উদাহরণ স্বরূপ, Connection.Start - পদ্ধতি কল Start বর্গ Connection.
সংযোগ এবং চ্যানেল
ক্লায়েন্ট এবং সার্ভারের মধ্যে তথ্য বিনিময়ের জন্য, চ্যানেল. চ্যানেলের মধ্যে তৈরি করা হয় নির্দিষ্ট সংযোগ. প্রতিটি চ্যানেল অন্য চ্যানেল থেকে বিচ্ছিন্ন। সিঙ্ক্রোনাস ক্ষেত্রে, একটি প্রতিক্রিয়া প্রাপ্ত না হওয়া পর্যন্ত পরবর্তী কমান্ডটি চালানো সম্ভব নয়।
সমান্তরালভাবে কমান্ড পাঠাতে সক্ষম হওয়ার জন্য, আপনাকে বেশ কয়েকটি চ্যানেল খুলতে হবে। প্রতিটি চ্যানেল আলাদা করে তৈরি করে Erlang প্রক্রিয়া একটি সংযোগে একাধিক চ্যানেল থাকতে পারে (মাল্টিপ্লেক্সিং) প্রতিটি চ্যানেলের জন্য, মেমরিতে নির্দিষ্ট কাঠামো এবং বস্তু রয়েছে। অতএব, একটি সংযোগের মধ্যে আরো চ্যানেল আছে, আরও মেমরি RabbitMQ দ্বারা ব্যবহৃত হয় যেমন একটি সংযোগ পরিচালনা করতে.
একটি সংযোগ এবং একটি চ্যানেল ব্যবহার করে তৈরি করার একটি সহজ উদাহরণ RabbitMQ.Client:
// ...
private void TryConnect()
{
var factory = new ConnectionFactory()
{
HostName = "host_name",
UserName = "user_name",
Password = "p@ssword",
// Включение автоматичекого восстановления
// соединения после сбоев сети
AutomaticRecoveryEnabled = true
};
_connection = factory.CreateConnection();
}
// ...
public void CreateChanel()
{
_channel = _connection.CreateModel();
// other options
}
প্রতিটি অপারেশনের জন্য একটি নতুন সংযোগ খোলাকে দৃঢ়ভাবে নিরুৎসাহিত করা হয় উচ্চ খরচের দিকে পরিচালিত করে. চ্যানেলগুলিকেও ক্রমাগত থাকতে হবে, কিন্তু অনেক প্রোটোকল ত্রুটির কারণে চ্যানেলটি বন্ধ হয়ে যায়, তাই একটি চ্যানেলের জীবনকাল একটি সংযোগের চেয়ে ছোট হতে পারে।
RabbitMQ কোথায় ব্যবহার করা হয়?
মাইক্রোসার্ভিসেসের প্রসঙ্গে, প্রোটোকল AMQP এবং এর বাস্তবায়ন RabbitMQ প্রায়ই জন্য ব্যবহৃত অ্যাসিঙ্ক্রোনাস মিথস্ক্রিয়া পরিষেবাগুলির মধ্যে।
প্রেক্ষাপটে IIOT প্রোটোকল AMQP এবং এর বাস্তবায়ন RabbitMQ সার্ভারের (সার্ভার-সার্ভার) মধ্যে ডেটা বিনিময়ের জন্য ব্যবহৃত হয়। এছাড়াও প্লাগইন ব্যবহার করে MQTT প্লাগইন RabbitMQ যা প্রোটোকলের বাস্তবায়ন MQTT একটি সেন্সর এবং একটি সার্ভারের মধ্যে কম-গতি, উচ্চ-বিলম্বিত পরিবেশে ডেটা স্থানান্তরের জন্য (সমর্থিত প্রোটোকলের সম্পূর্ণ তালিকার জন্য, দেখুন প্রকল্প সাইট).
পরবর্তী নিবন্ধে, আমরা এক্সচেঞ্জের সাথে আরও বিশদভাবে বুঝতে শুরু করব।