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

دوشنبه 5 آبان 1399

با پیشرفت دنیا ، مردم راه حل های بر طرف کردن نیاز هاشون رو بیشتر از همیشه سمت برنامه های نرم افزاری میبینند . در کل ، تکنولوژی داره روز به روز پیشرفت میکنه و مردم دارند به سمت استفاده از تکنولوژی برای برطرف کردن نیاز ها و مشکلاتشون میان و بقول استاد مدائنی ، این امر بدون ما برنامه نویس ها غیر ممکنه

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

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

 

با پیشرفت دنیا ، مردم راه حل های بر طرف کردن نیاز هاشون رو بیشتر از همیشه سمت برنامه های نرم افزاری میبینند . در کل ، تکنولوژی داره روز به روز پیشرفت میکنه و مردم دارند به سمت استفاده از تکنولوژی برای برطرف کردن نیاز ها و مشکلاتشون میان و بقول استاد مدائنی ، این امر بدون ما برنامه نویس ها غیر ممکنه

لذا با اين شرايط ما برنامه نویس ها ، احتیاج داریم که برنامه های خودمون رو بروز کنیم تا یه وقت توی این سیل برنامه ها و تکنولوژی ها ، برنامه ما جا نمونه  

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

ما می توانیم با استفاده از RabbitMQ بین سیستم های مختلف با سرور های مختلف و حتی زبان های برنامه نویسی مختلف ارتباط برقرار کنیم و پیام هایی که محتوا آنها بعضا فایل ، اطلاعات ، داده ها و خیلی چیز های دیگه هستند رو ارسال کنیم و اینطوری برنامه ما میتونه بروز باشه و این یعنی تکنولوژی .

در ادامه با برخی اصطلاحات و مفاهیم در RabbitMQ آشنا میشویم .

تولید کننده ، ارسال کننده یا Producer

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

پیام هایی ارسالی میتونن از هرنوعی باشند . یعنی میتونند اطلاعات یک فرایند که روی حتی یک سرور دیگه اجرا میشه رو داشته باشند یا اینکه فقط یک پیام ساده باشند .

صف بندی یا Queueing

ما میتونیم RabbitMQ رو به عنوان queue manager (مدیریت کننده صف بندی) نیز معرفی کنیم . یعنی پیام های ارسالی از سوی سیستم های مختلف به صف هایی که از قبل تعریف شده متصل میشند و منتظر پردازش میمونند .

هر صف برای یک وظیفه مشخص ساخته میشه . به عنوان مثال یک صف فقط وظیفه صف بندی پیام های Log که از سیستم های مختلف ارسال میشه رو برعهده داره.

صف بندی پیام ها در RabbitMQ

صف بندی پیام ها در RabbitMQ


مصرف کننده ، دریافت کننده یا Consumer

این بخش به عنوان دریافت کننده و بهتر بگم شنونده پیام ها عمل میکنه . وظیفه اصلی این بخش اینه که به صف هایی که تعیین شده نگاه میکنه و اگر پیامی برای پردازش بود دونه دونه پیام هارو از صف برمیداره و پردازش میکنه .

مبدل یا Exchanger

پیام ها به صورت مستقیم از تولید کننده ها به صف ها ارسال نمی شود . بلکه در این بین از مبدل ها عبور میکنن . هر مبدل وظیفه اش این است با استفاده از Binding و Route-Key ها پیام ها رو به صف های مختص خودش ارسال کند .

مبدل ها سه نوع هستند :

مستقیم - Direct : پیام ها رو به صورت مستقیم به صف مربوطه هدایت میکنه

موضوع - Topic : پیام ها رو از طریق شباهت Routing-Pattern ها به صف های مورد نظر هدایت میکنه

متعصب - Fanout : پیام ها رو به تمام صف هایی که بهش متصل هستند ارسال میکنه

 

مثال برای درک بهتر :

شما فرض کنید یک سیستم فروشگاهی دارید که میخواید بعد از خرید برای مشتری با استفاده از سیستم ایمیلینگ یک فاکتور رو ایمیل کنید و همینطور در سیستم حسابداری میخواید این خرید ثبت بشه و از طرفی هم میخواد اطلاعات خرید کاربر رو با استفاده از سیستم لاگینگ لاگ کنید تا بعدا بتونید روش آنالیز و داده کاوی کنید .

اگر در سیستم های قدیمی بخواهیم این پیاده بشه باید شما تموم این عملیات و logic هایی که گفته شد رو درست بعد از خرید ثبت کنید . که این خود کلی بار اضافه روی سیستم میاره و باعث کندی عملیات و درخواست میشه .

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

این یکی از مزیت های RabbitMQ محسوب میشه .

یک مثال هم از طریق تصویر ببینیم :)

 

چند تا نکته راجب RabbitMQ و میکروسرویس :

شما میتونین از RabbitMQ در طراحی نرم افزار های میکروسرویس استفاده کنید . می توانید از آن به عنوان یک Api Gateway برای ارتباط با میکروسرویس های متعدد استفاده میشه .

نیازی نیست شما برای توسعه یک بخش برای مثال بخش حسابداری کل سیستم رو توسعه بدید و دوباره استقرار داده بشه فقط کافیه میکروسرویس مربوط به هربخش توسعه داده بشه .

میکروسرویس ها میتونن با تیم های جداگانه و با زبان های جداگانه نوشته بشوند .

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

استفاده از RabbitMQ و میکروسرویس پیچیدگی های خاص خودش را داره و برای پروژه های در سطح متوسط به پایین توصیه نمیشه . چون خودش باعث پیچدگی میشود .

برای اینکه بتوانید این سرویس را دیپلوی کنید، پارامتر‌های زیر را می‌توانید مشخص کنید:

کانفیگنوعپیش‌فرضتوضیح
service_namestringrabbitmqنامی که برای سرویس مایلید در نظر گرفته شود
rabbitmq_usernamestringrabbitmqنام کاربری
rabbitmq_passwordstringrabbitmqگذرواژه
dashboard_enabledbooleanfalseآیا rabbitmq در محیط وب در دسترس باشد یا خیر
rabbitmq_pluginsstring لیست پلاگین‌های RabbitMQ
volume_namestring نام volumeای که به سرویس وصل می شود
volume_browser_enabledbooleanfalseآیا سرویس مدیریت Dedicated Volume برای این سرویس ساخته شود یا خی

امير مهدی جبرئيلی

نویسنده 2 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید

نظرات کاربران