RabbitMQ یک middleware پیام توزیع شده است که در زبان Erlang توسعه یافته و منبع باز شده است. این از پروتکل AMQP (Advanced Message Queuing Protocol) و کتابخانههای مشتری در زبانهای برنامهنویسی مختلف مانند Java، Golang، PHP و Python پشتیبانی میکند.
ویژگیها
- قابلیت اطمینان: از طریق ثبات پیام، پشتیبانی از تراکنش، تأیید مصرف کننده و انتقال، اطمینان از ایمنی را فراهم میکند.
- مکانیزم مسیریابی: از مدلهای مشترک مانند پخش، اشتراک و تطبیق هدر پشتیبانی میکند.
- مقیاسپذیری: چندین گره RabbitMQ میتوانند یک خوشه را تشکیل دهند و میتوانند خوشه را بر اساس نیازهای واقعی کسبوکار به طور پویا گسترش دهند.
- در دسترس بودن بالا: صفها میتوانند بر روی دستگاهها در خوشه به عنوان آینه تنظیم شوند که صفها در صورت وجود مشکل در برخی از گرهها هنوز در دسترس هستند.
- پروتکلهای چندگانه: علاوه بر پشتیبانی AMQP، RabbitMQ نیز از چندین پروتکل میانافزاری پیام رسانی مانند STOMP، MQTT و غیره پشتیبانی میکند.
- مشتریان چندزبانه: RabbitMQ تقریباً از تمام زبانهای رایج مانند Java، Python، Ruby، PHP، C#، JavaScript و غیره پشتیبانی میکند.
- رابط مدیریت: RabbitMQ یک رابط کاربری دوستانه برای مانیتورینگ و مدیریت پیامها و گرههای خوشه فراهم میکند.
- مکانیزم پلاگین: RabbitMQ افزونههای زیادی برای گسترشهای گسترده فراهم میکند و کاربران همچنین میتوانند پلاگینهای خود را بنویسند.
موارد استفاده اصلی
پردازش ناهمزمان
بخشهای غیر مرکزی یا کماهمیت فرآیند کسبوکار با استفاده از اعلان پیام به صورت ناهمزمان به سیستم مقصد اطلاع داده میشوند تا فرآیند اصلی کسبوکار بدون انتظار همزمان برای نتایج پردازش از سایر سیستمها فوراً واکنش نشان دهد.
جداسازی برنامه
گسترش کسبوکار بر اساس مکانیزمهای اشتراک پیام قابل دستیابی است. به عنوان مثال، در یک سناریوی سفارش دهی تجارت الکترونیک، هنگامی که یک کاربر سفارش را ثبت میکند، یک پیام سفارش تولید میشود. ماژول انبار میتواند برای حملونقل به پیام سفارش مشترک شود، ماژول امتیاز میتواند برای افزودن امتیاز به پیام سفارش مشترک شود و ماژول پیامک میتواند برای ارسال پیامهای متنی به پیام سفارش مشترک شود و ...
محدودکردن اوج
زیرساخت و سیستمهای پایینتری قدرت پردازش ممکن است با یکدیگر تفاوت داشته باشند، صفهای پیام میتوانند به عنوان یک تنظیمکننده عمل کنند تا این امکان را بدهند که سیستمهای پایینتری به یک نرخ ثابت ترافیک را مدیریت کنند.
به عنوان مثال، در صورت پرداخت موفقیتآمیز یک سفارش و اطلاعرسانی به انبار برای حملونقل، اگر ماژول فعلی سفارش از توانایی همزمان بالای 1000 پشتیبانی میکند و حملونقل انبار فقط 100 را پشتیبانی میکند، معرفی یک صف پیام میتواند به ماژول انبار امکان مشترک شدن در پیام سفارش و برخورداری از حملونقل را به صورت کند و نرم در یک صف انجام دهد.
یادداشت: مثل ایستادن در صف مترو است.