RabbitMQ یک نرمافزار واسط پیامرسانی (Message Broker) است که با کمک آن، نرمافزارهای مختلف میتوانند با هم ارتباط برقرار کنند. این نرمافزار دقیقا مثل یک واسط فعالیت میکند. یک پیام را از اپلیکیشن اول «دریافت» کرده و سپس پیام دریافت شده را به اپلیکیشن دوم، «ارسال» میکند. نکته مهم و جالب این است که برای برقراری این ارتباط، نیازی نیست که هر دو نرمافزار بهصورت همزمان آنلاین باشند. پیامهای ارسال شده به RabbitMQ، میتوانند در همانجا ذخیره شده و بعدا ارسال شوند.
تاریخچه RabbitMQ
نرمافزار RabbitMQ در سال 2007، توسط کمپانی توسعه نرمافزارRabbit Technologies Ltd ساخته شد. این کمپانی بعدها توسط SpringSource خریداری شد و پس از مدتی، VMware آن را خرید. در حال حاضر RabbitMQ به کمپانی توسعه نرمافزار Pivotal Software تعلق دارد. از زمان ساخت RabbitMQ، این نرمافزار به یکی از پرکاربردترین و رایجترین نرمافزارهای واسط دنیا تبدیل شد. با وجود این توضیحات اولیه، یک سوال مهم در همین ابتدا به وجود میآید: نرمافزار واسط RabbitMQ چطور کار میکند؟
نحوه کار RabbitMQ چگونه است؟
این نرمافزار از طریق دو فعالیت اصلی یعنی Exchange و Queues کار میکند. وقتی یک نرمافزار، به RabbitMQ پیامی ارسال میکند، در ابتدا آن پیام به یک Exchange فرستاده میشود. وظیفه اصلی یک Exchange این است که پیامهای دریافت شده از یک تولیدکننده (نرمافزار اول) را مسیریابی کرده و به صف مناسب منتقل کند. حالا احتمالا این ابهام به وجود میآید که هر پیام بر چه اساسی به صفهای مختلف فرستاده میشود؟
در جواب باید بگوییم که هر Exchange بر طبق یک اصول از پیش تعیین شده که Binding نام دارند، پیامها را بررسی خواهند کرد. سپس بر طبق همان دستورالعملهای پیشفرض، آن پیامها را دستهبندی میکنند.
این دستورالعملهای پیشفرض، به 4 مدل اصلی تقسیم میشوند:
- Direct Exchange: این مدل، پیامها را بر اساس کلیدهای مسیریابی تعیین شده توسط تولیدکننده (نرمافزار اولیه) پیام، مسیریابی میکند.
- Fanout Exchange: این دستورالعمل، پیامها را در تمام صفهای متصل به خود پخش (Broadcast) میکند.
- Topic Exchange: این اکسچنج به این شکل کار میکند که مسیریابی پیامها را بر طبق الگویی انجام میدهد که با کلید مسیریابی پیام، تطابق کامل داشته باشد.
- Headers Exchange: بر اساس مجموعه مشخصههای هدر هر پیام، پیامها را مسیریابی میکند.
به محض اینکه بخش Exchange، تعیین کرد که پیام دریافت شده باید به کدام صف ارسال شود، پیام در همان صف ذخیره میشود. حالا صف یا Queue چیست؟ صف یک ساختار داده است که پیامها را تا زمان تحویلگرفتن توسط نرمافزار دوم که دریافتکننده یا همان Consumer نامیده میشود، نگهداری میکند. دریافتکنندهها میتوانند بهمحض آنلاین شدن پس از مدتی غیرفعال بودن، پیام را دریافت کنند.
هر دریافت کننده یا Consumer میتواند در یک یا چندین صف، سابسکرایب یا همان ثبت شده باشد. وقتی که یک دریافت کننده در یک صف ثبت میشود، پیامهای ارسال شده به آن صف را به شکل First-in, First-Out دریافت میکند. چندین دریافت کننده میتوانند در یک صف واحد ثبت شده باشند و در این حالت، پیامها به مدل Round-Robin بین آنها پخش خواهد شد.
RabbitMQ از چندین پروتکل ارسال پیام پشتیبانی میکند. برخی از مهمترین پروتکلهای مورد استفاده در این نرمافزار شامل این موارد هستند:
- Advanced Message Queuing Protocol (AMQP)
- Message Queuing Telemetry Transport (MQTT)
- Streaming Text Oriented Messaging Protocol (STOMP)
- Hypertext Transfer Protocol (HTTP)
بهصورت خلاصه باید بگوییم که RabbitMQ با استفاده از روشهای مختلف Exchange، پیامها را به صفهای متناسب ارسال میکند. دریافت کنندهها هم میتوانند پیامهای خود را از صفهای مختلف بازیابی کنند. نرمافزار RabbitMQ از چندین پروتکل پیامرسانی پشتیبانی میکند، میتواند حجم عظیمی از ترافیک را مدیریت کرده و یک سیستم تحویل پیام قابل اطمینان، در اختیار کاربران میگذارد.
RabbitMQ در پاسخ به چه نیاز یا مشکلی ساخته شد؟
نیاز به یک سیستم پیامرسانی قابل اطمینان میان نرمافزارهای مختلف، باعث ساختهشدن RabbitMQ شد. به مرور زمان، نرمافزارهای مختلف گسترش یافته و پیچیدهتر شدند. در این حالت، توسعهدهندهها به روشی قابل اطمینان و هماهنگ نیاز داشتند که بتوانند حتی در حالتی که ارسالکننده و دریافت کننده بهصورت همزمان آنلاین نباشند، با هم ارتباط برقرار کنند. این نیاز باعث ساخت سیستمهای واسط مبتنی بر پیام (MOM) شد. سیستمهای MOM، یک زیرساخت پیامرسانی قابل اطمینان فراهم میکنند که به نرمافزارهای مختلف اجازه میدهد در یک محیط قابل اعتماد، با هم ارتباط برقرار کنند.
نرمافزار RabbitMQ بهصورت اختصاصی برای از بین بردن محدودیتهای موجود در سایر سیستمهای پیامرسانی آن زمان مثل JMS (Java Message Service) و AMQP (Advances Message Queuing Protocol) به وجود آمد. این نرمافزار بهعنوان نرمافزار واسط اوپنسورس طراحی شده که بتواند پروتکل AMPQ را پیادهسازی کند. پروتکل AMPQ یک پروتکل قابل اطمینان و استاندارد کارآمد پیامرسانی است.
یکی از مهمترین مشکلاتی که با وجود نرمافزار RabbitMQ رفع شد، مشکل قطع شدن (Decoupling) ارتباط اپلیکیشنها با یکدیگر بود. با استفاده از یک واسط نرمافزاری مثل RabbitMQ، نرمافزارها میتوانند بدون نیاز به اتصال کامل با یکدیگر، از طریق یک زیرساخت پیامرسانی با هم ارتباط برقرار کنند. این روش باعث میشود که تغییردادن، اصلاح یا گسترش بخشهایی از یک نرمافزار توزیعیافته، راحتتر باشد و بدون آسیبزدن به دیگر بخشهای سیستم، بتوان اصلاح یا تغییر را در بخشهای کوچک و محدود، انجام داد.
علاوه بر این موارد گفته شده، RabbitMQ کمک میکند که پیامهای رد و بدل شده بین نرمافزارهای مختلف مدیریت شود. بدین شکل، پیامها در مسیر از بین نرفته یا روی هم تلنبار نمیشوند. این نرمافزار بهراحتی میتواند حجم عظیمی از ترافیک را کنترل کرده و تنها با افزودن نود به کلاسترهای مختلف، ابعاد نرمافزار را بهصورت افقی گسترش دهد. به این شکل، میتوان گفت که RabbitMQ یکی از بهترین، کارآمدترین و در دسترسترین روش برای برقراری ارتباط بین اپلیکیشنها است.
بهصورت کلی باید بگوییم که نرمافزار RabbitMQ به این دلیل ساخته شد که نرمافزارهای مختلف به یک زیرساخت امن و قابل اطمینان نیاز داشتند. این نرمافزار واسط باید قابلیت ارتباط همزمان و امن را در اختیار اپلیکیشنها میگذاشت. به طوری که حتی اگر ارسال کننده و دریافتکننده، هر دو آنلاین نباشند، بتوانند این ارتباط کامل و امن را با یکدیگر حفظ کنند.
ویژگیها مهم نرمافزار RabbitMQ
اپلیکشن واسط RabbitMQ، مشخصههای متنوعی دارد. با وجود این مشخصهها، این نرمافزار محبوبیت زیادی پیدا کرده و به همین خاطر، یک روش پیادهسازی پیامرسانی امن و قابل توسعه، شناخته میشود. برخی از مهمترین ویژگیهای کلیدی این نرمافزار، شامل موارد زیر هستند:
صف پیامها
این نرمافزار از قابلیت صف پیامها پشتیبانی میکند. در این حالت، اپلیکیشنها میتوانند بهصورت همزمان ارتباط برقرار کنند و از سوی دیگر، تحویل دقیق و کامل پیامها، تضمین میشود.
مسیریابی یا Routing
یکی از مهمترین مشخصههای RabbitMQ، داشتن مکانیزم منعطف مسیریابی است. این روش مسیریابی منعطف، امکان تحویلدادن پیامها به مقصدهای متنوع را فراهم میکند. این مقصدها بر اساس کلیدهای مسیریابی، روش اکسچنج و اصول اولیه تعریف شده، تعیین میشوند.
پشتیبانی از پروتکلهای متعدد
نرمافزار RabbitMQ از چندین پروتکل پیامرسانی مثل AMQP، MQTT، STOMP و HTTP پشتیبانی میکند. به همین خاطر، یکپارچهسازی بین این نرمافزار و دیگر اپلیکشنها، بسیار سریعتر و راحتتر رخ میدهد.
کلاسترسازی
یکی از مهمترین ویژگیهای این نرمافزار واسط این است که میتوان RabbitMQ را به پیکربندی کلاسترها اعمال کرد. در این صورت، امکان گسترش افقی نرمافزار فراهم شده و میزان در دسترسبودن RabbitMQ بیشتر میشود.
تایید ارسال و دریافت پیامها
یکی دیگر از مشخصههای کلیدی این نرمافزار، امکان تایید ارسال و دریافت پیامها است. با وجود این قابلیت کلیدی، نرمافزارهای دریافتکننده میتوانند دریافت پیامها را تایید کنند و این تضمین ایجاد میشود که در زمان تبادل، هیچ پیامی از بین نمیرود.
اولویتبندی صفها
در این نرمافزار، اولویتبندی صفها وجود دارد. بااستفاده از این ویژگی، پیامها بر اساس اولویتهای موجود، پردازش میشوند.
ماندگاری پیام
RabbitMQ، پیامها را بر روی دیسک ذخیره میکند. به همین دلیل هیچ پیامی بر اثر اجرای ناموفق یا خطاهای سیستمی، از بین نخواهد رفت.
امنیت
این نرمافزار دارای امنیت درونبرنامهای است. این امنیت داخلی شامل رمزگذری SSL/TSL، تشخیص هویت کاربر و ارائه مجوزهای دسترسی است.
مدیریت و نظارت
نرمافزار واسط RabbitMQ یک رابط مدیریتی و نرمافزاری برای نظارت و هماهنگی زیرساخت پیامها نیز ارائه میدهد.
نرمافزار RabbitMQ ویژگیهای متعددی دارد که باعث شده این نرمافزار واسط به اپلیکیشنی امن، قابل گسترش و چند منظوره تبدیل شود. RabbitMQ از چندین پروتکل پیامرسانی، انواع مکانیزم مسیریابی و کلاستربندی پشتیبانی میکند. به همین خاطر و با توجه به همه این ویژگیها، این نرمافزار به انتخاب محبوب اغلب کاربران برای پیادهسازی روشهای پیامرسانی در اپلیکیشنهای گوناگون تبدیل شد. قابلیتهای امنیتی و مدیریتی آن نیز به محبوبیت هر چه بیشتر این نرمافزار واسط کمک کرده است. با وجود همه این ویژگیها، این سوال مهم ایجاد میشود که استفاده از این نرمافزار، چه مزیتهایی برای کاربران دارد؟
مزایای مهم RabbitMQ
برخی از مهمترین مزایای نرمافزار واسط RabbitMQ شامل موارد زیر هستند:
مقیاسپذیری
نرمافزار RabbitMQ بهراحتی میتواند حجم عظیمی از دادهها را مدیریت کند. علاوه بر آن، برای رفع نیازهای اپلیکیشن، بهسادگی میتوان ابعاد آن را گسترش داد.
انعطافپذیری
RabbitMQ از چندین الگوی پیامرسانی پشتیبانی میکند. برخی از مهمترین الگوهای این نرمافزار شامل الگوی ارسال پیام نقطه به نقطه (PTP)، Publish-Subscribe و Request-Reply هستند. به همین خاطر این امکان در اختیار شما و دیگر کاربران وجود دارد که الگوی پیامرسانی منطبق با نیازهای اپلیکیشن خود را از میان این الگوهای متنوع موجود، انتخاب کنید.
قابل اعتماد
با داشتن ویژگیهای متعددی همچون تایید ارسال و دریافت پیام، ماندگاری پیامها و تراکنشها، RabbitMQ میتواند بهراحتی این تضمین را به شما بدهد که هر پیام، حتما به مقصد خود تحویل داده میشود.
فراهمکردن فضای همکاری
از آنجا که RabbitMQ از چندین پروتکل پیامرسانی پشتیبانی میکند، این امکان را در اختیار همه میگذارد که اپلیکیشنهای نوشته شده با زبانهای متفاوت، بهسادگی با همدیگر ارتباط برقرار کرده و بتوانند با هم همکاری کنند.
استفاده آسان
این نرمافزار واسط برنامهنویسی کاربردی (API) ساده و آسان دارد. به همین خاطر، میتوان خیلی راحت این نرمافزار را با دیگر زبانهای برنامهنویسی و فریمورکها، ادغام کرد.
پشتیبانی قوی
افراد بسیار زیادی از RabbitMQ استفاده میکنند. به همین دلیل، یک کامیونیتی قدرتمند برای این نرمافزار به وجود آمده است. پشتیبانی کامل، مستندات قوی و پلاگینهای متعددی هم برای این نرمافزار ساخته شده که میزان کارایی RabbitMQ را افزایش داده است.