RabbitMQ چیست؟ با این Message Broker  و مفاهیم مهم موجود در RabbitMQ آشنا شویم

RabbitMQ چیست؟ با این Message Broker و مفاهیم مهم موجود در RabbitMQ آشنا شویم

بصورت کلی یک Message Broker یا کارگزار پیام، یه نرم‌افزار یا سرویس هست که به عنوان واسطه در ارسال و دریافت پیام‌ها بین برنامه‌های مختلف در یک سیستم توزیع‌شده عمل می‌کند.

بطور کلی RabbitMQ یک  message broker می باشد که به شما اجازه میده تا بین سرویس های مختلف تبادل اطلاعات را داشته باشید و این سرویس ها با همدیگر ارتباط برقرار کنند. 

من در این مقاله سعی میکنم مفاهیم کلیدی RabbitMQ را برای شما معرفی کنم.

RabbitMQ چیست؟ 

RabbitMQ در اصل یک  message broker متن باز است که به شما اجازه میدهد تا بین سرویس هاتون ارتباط بقرار کنید و این عملیات را بهینه تر کنید.

 message broker چیست؟

فرض کنید شما دوتا نرم افزار دارید که قرار است هنگامی که در سیستم یک کاربر پروفایل خودش رو آپدیت کرد در سیستم ۲ اطلاعاتی بروز شود. خوب شما می توانید به محض بروز شدن اطلاعات در سیستم یک، یک درخواست http به سیستم دوم ارسال کنید و آن را نیز بروز کنید و سپس پاسخ کاربر را نمایش دهید.  بدون شک این روش خیلی بهینه نیست! و علاوه بر ناتوانی در هندل کردن خطاهای ایجاد شده، در تعداد بالای درخواست باعث فشار بالا روی سرور میشود.

اما راه حل چیه؟

راه حل استفاده از صف می باشد! 

شما می توانید با کمک message broker ها صف های خود را مدیریت کنید.

بصورت کلی یک Message Broker یا کارگزار پیام، یه نرم‌افزار یا سرویس هست که به عنوان واسطه در ارسال و دریافت پیام‌ها بین برنامه‌های مختلف در یک سیستم توزیع‌شده عمل می‌کند.

این ابزار در الگوهای معماری مبتنی بر پیام، مانند معماری میکروسرویس‌ها یا معماری‌های مبتنی بر رویداد، به کار میره تا پیام‌ها رو از منتشرکننده (publisher) دریافت کنه و اونها رو به مشترک (subscriber) ارسال کنه.

پس بصورت خلاصه می توان گفت که RabbitMQ یه کارگزار پیام یا همون Message Broker هست که کار مدیریت صف ها و رویدادهای ما رو در سیستم های  توزیع شده راحت تر میکنه.

برای نمونه توی مثال بالا وقتی کاربر درخواست بروزرسانی پروفایل رو ارسال میکنه ما به RabbitMQ می گیم یه درخواست با اطلاعات زیر اومده و پاسخ سپس رو به کاربر نشون میدیم. بعد از اون RabbitMQ خودش در بکگراند سیستم درخواست رو دریافت میکنه و میبینه باید به کدوم سرویس بده به اون سرویس میفرسته! و البته اگر موقع ارسال به سیستم دوم به خطا بخوره میتونه مجدد تلاش کنه و اگر در نهایت شکست خورد ما میتونیم لاگ خطا ها رو ببینیم و پس از رفع خطا مجدد RabbitMQ برای ما اون پیام رو به سرویس دوم میرسونه. البته ممکنه یک پیام یا رویداد همزمان بخواد به چند سیستم ارسال بشه که RabbitMQ هم اینو هندل کرده و در صورتی که شما در سیستم شماره یک رویدادی ایجاد کنید که مثلا سیستم های شماره ۲ و ۴ باید بشنون. RabbitMQ پس از دریافت اون پیام یا رویداد اون رو برای سیستم ها مورد نظر میفرسته و سیستم ها رو از دریافت همچین رویدادی آگاه میکنه.

 

خوب آیا بجز RabbitMQ ما میسج بروکر دیگه ای هم داریم؟

پاسخ بله!

Apache Kafka، IBM MQ، Google Pub/Sub هر کدوم مسیج بروکر هایی هستند که قابلیت های متفاوتی دارند که در این مطلب بهشون نمی پردازیم.

 

با این حال RabbitMQ یک  Message Broker سبک وزن هست که به راحتی در محیط های ابری یا محلی لانچ میشه و همچنین از پروتکل های متعددی برای ارسال و دریافت پشتیبانی میکنه و به راحتی با استفاده از داکر میتونید اون رو بیارید بالا و توی سیستم های خود از اون استفاده کنید. به همین خاطر این بروکر یکی از محبوب ترین بروکرهای حال حاضر هست.

 

چرا از RabbitMQ استفاده کنیم؟

استفاده از RabbitMQ نسبت به دیگر message broker ها چندین مزیت داره که به خلاصه سعی میکنم در زیر به هر کدوم اشاره کنم:

Reliability یا قابلیت اطمینان: RabbitMQ مکانیسم هایی مانند تداوم پیام و تایید پردازش  Acknowledgement (ACK) رو ارائه میده.(مصرف کننده یا consumer یک پیام برای RabbitMQ ارسال میکنه که پیام با موفقیت دریافت شده.

Support for Multiple Protocols یا پشتیبانی از پروتکل‌های چندگانه:  RabbitMQ از AMQP و MQTT و غیره پشتیبانی می‌کند.

Lightweight  یا سبک وزن:  RabbitMQ سبک وزن می باشد و به گونه ای طراحی شده است که کارآمد و سازگار با منابع باشد.

Multi-Language Support یا پشتیبانی از چند زبان: RabbitMQ از زبان های گسترده ای همچون C#، Java، Ruby، Python، JavaScript و Go و... پشتیبانی میکند.

Intuitive Management Interface یا رابط کاربری مدیریت: RabbitMQ یک رابط کاربری بصری بسیار ساده و کامل ارایه میده که میتونید توی اون بر فعالیت صف ها و رویدادها هم نظارت داشته باشد.

Pub/Sub Patterns یا الگوی انتشار/اشتراک:  RabbitMQ از الگوی publish/subscribe  برای ارتباط استفاده می کند.

 

اینها بخشی از مزایای استفاده از RabbitMQ می باشد که بصورت خلاصه توضیحاتی در مورد هر کدوم نیز ارایه شد. خوب ما در RabbitMQ یکسری مفاهیم کلیدی نیز داریم که بهتره با این مفاهیم بیشتر آشنا بشیم:

Queue یا صف:

صف که بدون شک همه ما با اون آشنا هستیم یک ساختار داده است که توی اون پیام های ذخیره و سپس مصرف می شن. صف ها بادوام هستن یعنی درصورت راه اندازی مجدد کارگزار بافی میمونن، بصورت خودکار پس از مصرف توسط مصرف کننده حذف میشن.

 

Exchange یا تبادل:

فرض کنید یک تقاطع خیلی شلوغ وجود داره که ممکنه در لحظه دهها و صدها خودرو از اون بخوان عبور کنن. بدون شک اگر یک پلیس یا چراغ راهنما وجود نداشته باشه که این تقاطع رو کنترل کنه بزودی همه چیز بهم میریزه و خوب ترافیک سنگینی ایجاد میشه که هیچ کدوم از افراد تو زمان مشخص به مقصدشون نمی رسن! حالا Exchange رو توی RabbitMQ یک پلیس راهنمایی رو رانندگی در نظر بگیرید که بصورت خیلی هوشمندانه پیام ها رو بر اساس معیارهایی به صف های مشخص شده هدایت میکنه.

به طور خلاصه، وظیفه اصلی Exchange، دریافت پیام‌ها و تعیین مسی اونها به صف‌های مناسب بر اساس معیارهای تعریف‌شده است. Exchange ها انواع مختلفی دارند که هرکدام بر اساس نوع کاربرد و نیاز سیستم پیکربندی و استفاده میشن، مانند Direct, Fanout, Topic, و Headers که هرکدام به شیوه‌ای متفاوت پیام‌ها را مسیریابی می‌کنند.

 

Binding:

Binding در RabbitMq نقش یک 'پل ارتباطی' بین صف ها(queues) و مبادلات (exchanges) رو ایفا میکنه. اگه بخوایم ساده تر بگیم Binding قوانینی رو تعریف میکنه که بر اساس اونها پیام از یک Exchange به صف های مختلف منتقل میشه. این قوانین خودشون می تونن شامل موضوعات خاص، هدر ها یا کلیدهای مسیریابی باشن که هرکدوم مشخص می کنه پیام باید به کدوم صف بره.

فرض کنید یک exchange نوع direct داریم به نام direct_exchange و دو صف به نام‌های queue1 و queue2. اگه برای queue1 Binding با کلید مسیریابی key1 و برای queue2 با کلید key2 تعریف کنیم، وقتی پیامی با کلید key1 به direct_exchange برسد، تنها به queue1 مسیریابی می‌شود.

این مکانیزم انعطاف‌پذیری قابل توجهی در مدیریت پیام‌ها در سیستم‌های پیچیده و توزیع‌شده فراهم میکنه و به کاربران اجازه میده تا جریان های داده رو بر اساس نیازهای خاص خودشون بهینه‌ کنند.

 

Routing Key (کلید مسیریابی)

کلید مسیریابی(Routing Key) یه بخش مهم از پیام هست که در زمان ارسال پیام به Exchange مشخص میشه. این کلید، نقش آدرس‌دهی به پیام‌ها رو داره و بر اساس اون، مبادله‌گر تصمیم می‌گیره که پیام رو به کدوم صف‌ها باید هدایت کند.

چگونگی کارکرد Routing Key:

وقتی producer پیامی رو به exchange میفرسته یک Routing Key هم همراه پیام ارسال میکنه. اینجا Exchange تصمیم میگیره و Routing Key درون پیام رو با Binding های تعریف شده بین خودش و queue ها مقایسه میکنه. اگر کلید ارسال شده در پیام با کلید موجود در یک Binding مطابقت داشه باشه پیام رو به صف مورد نظر منتقل میکنه. این فرآیند میتونه در Exchange های نوع Direct، Topic و یا Headers استفاده شود، که هرکدام به شیوه‌ای متفاوت پیام‌ها را مسیردهی میکنند.

بطور کلی Routing Key نقش کلیدی در تعیین دقیق مقصد پیام‌ها در RabbitMQ دارد و باعث میشه که پیام‌ها به طور مؤثر و کارآمد به مقاصد مورد نظر برسند.

 

خوب توی این مقاله با کلیات RabbitMQ آشنا شدیم و با همچنین با برخی مفاهیم موجود در این مسیج بروکر نیز آشنا شدیم.

من قصد داشتم توی همین مقاله هم روش نصب RabbitMQ رو بیارم که خوب حس میکنم خیلی حوصله سر بر میشه و سعی میکنم تا چند روز آینده هم شیوه نصب RabbitMQ رو بصورت ساده توی یک مقاله ی جدا آموزش بدم.

 

اگر سوالی دارید یا در مورد مقاله پیشنهاد بهتری دارید از بخش نظرات برای ما ارسال کنید.

 


ارسال نظر

برای اطلاع از پاسخ به نظر شما می توانید ایمیل یا شماره موبایل خود را وارد نمایید. *

ایمیل و شماره موبایل شما کاملا مخفی خواهد ماند و در سایت نمایش داده نخواهد شد. *

اگر نظری برای این مطلب ارسال شد از طریق ایمیل مرا اطلاع بده!
لسیت نظرات
هنوز برای این مطلب نظری ارسال نشده است!