RabbitMQ چیست ؟ چرا از آن استفاده کنیم ؟
دوشنبه 5 آبان 1399با پیشرفت دنیا ، مردم راه حل های بر طرف کردن نیاز هاشون رو بیشتر از همیشه سمت برنامه های نرم افزاری میبینند . در کل ، تکنولوژی داره روز به روز پیشرفت میکنه و مردم دارند به سمت استفاده از تکنولوژی برای برطرف کردن نیاز ها و مشکلاتشون میان و بقول استاد مدائنی ، این امر بدون ما برنامه نویس ها غیر ممکنه
RabbitMQ چیست ؟ چرا از آن استفاده کنیم ؟
با پیشرفت دنیا ، مردم راه حل های بر طرف کردن نیاز هاشون رو بیشتر از همیشه سمت برنامه های نرم افزاری میبینند . در کل ، تکنولوژی داره روز به روز پیشرفت میکنه و مردم دارند به سمت استفاده از تکنولوژی برای برطرف کردن نیاز ها و مشکلاتشون میان و بقول استاد مدائنی ، این امر بدون ما برنامه نویس ها غیر ممکنه
لذا با اين شرايط ما برنامه نویس ها ، احتیاج داریم که برنامه های خودمون رو بروز کنیم تا یه وقت توی این سیل برنامه ها و تکنولوژی ها ، برنامه ما جا نمونه
RabbitMq یکی از اون سیستم هایی هست که ما نیاز داریم توی طراحی نرم افزار های مقیاس بزرگ و قابل توسعه از اون استفاده کنیم .
RabbitMQ سیستمی هست که به عنوان Message-Broker یا انتقال دهنده پیام بین سیستم های مختلف عمل میکنه که با استفاده از اون میتونیم پیام ها رو صف بندی کنیم و بین سیستم های مختلف انتقال بدیم .
ما می توانیم با استفاده از RabbitMQ بین سیستم های مختلف با سرور های مختلف و حتی زبان های برنامه نویسی مختلف ارتباط برقرار کنیم و پیام هایی که محتوا آنها بعضا فایل ، اطلاعات ، داده ها و خیلی چیز های دیگه هستند رو ارسال کنیم و اینطوری برنامه ما میتونه بروز باشه و این یعنی تکنولوژی .
در ادامه با برخی اصطلاحات و مفاهیم در RabbitMQ آشنا میشویم .
تولید کننده ، ارسال کننده یا Producer
این بخش به عنوان ارسال کننده پیام ها در RabbitMQ عمل میکنه . یعنی پیام ها رو از سیستم های مختلف به صف های مورد نظری که برای پردازش تعین شده ارسال میکنه .
پیام هایی ارسالی میتونن از هرنوعی باشند . یعنی میتونند اطلاعات یک فرایند که روی حتی یک سرور دیگه اجرا میشه رو داشته باشند یا اینکه فقط یک پیام ساده باشند .
صف بندی یا Queueing
ما میتونیم RabbitMQ رو به عنوان queue manager (مدیریت کننده صف بندی) نیز معرفی کنیم . یعنی پیام های ارسالی از سوی سیستم های مختلف به صف هایی که از قبل تعریف شده متصل میشند و منتظر پردازش میمونند .
هر صف برای یک وظیفه مشخص ساخته میشه . به عنوان مثال یک صف فقط وظیفه صف بندی پیام های Log که از سیستم های مختلف ارسال میشه رو برعهده داره.

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

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

مبدل ها سه نوع هستند :
مستقیم - Direct : پیام ها رو به صورت مستقیم به صف مربوطه هدایت میکنه
موضوع - Topic : پیام ها رو از طریق شباهت Routing-Pattern ها به صف های مورد نظر هدایت میکنه
متعصب - Fanout : پیام ها رو به تمام صف هایی که بهش متصل هستند ارسال میکنه
مثال برای درک بهتر :
شما فرض کنید یک سیستم فروشگاهی دارید که میخواید بعد از خرید برای مشتری با استفاده از سیستم ایمیلینگ یک فاکتور رو ایمیل کنید و همینطور در سیستم حسابداری میخواید این خرید ثبت بشه و از طرفی هم میخواد اطلاعات خرید کاربر رو با استفاده از سیستم لاگینگ لاگ کنید تا بعدا بتونید روش آنالیز و داده کاوی کنید .
اگر در سیستم های قدیمی بخواهیم این پیاده بشه باید شما تموم این عملیات و logic هایی که گفته شد رو درست بعد از خرید ثبت کنید . که این خود کلی بار اضافه روی سیستم میاره و باعث کندی عملیات و درخواست میشه .
ولی شما میتونید با استفاده از RabbitMQ عملیات ذکر شده رو به صورت پیام های جداگانه در صف های جداگانه ارسال کنید تا پردازش بشه . و دیگه نیازی به اجرای اون روی منطق خرید شما نباشه . و هر سیستم با استفاده از Consumer مربوط به صف خودش پیام هارو برمیداره و پردازش میکنه .
این یکی از مزیت های RabbitMQ محسوب میشه .
یک مثال هم از طریق تصویر ببینیم :)

چند تا نکته راجب RabbitMQ و میکروسرویس :
شما میتونین از RabbitMQ در طراحی نرم افزار های میکروسرویس استفاده کنید . می توانید از آن به عنوان یک Api Gateway برای ارتباط با میکروسرویس های متعدد استفاده میشه .
نیازی نیست شما برای توسعه یک بخش برای مثال بخش حسابداری کل سیستم رو توسعه بدید و دوباره استقرار داده بشه فقط کافیه میکروسرویس مربوط به هربخش توسعه داده بشه .
میکروسرویس ها میتونن با تیم های جداگانه و با زبان های جداگانه نوشته بشوند .
اگر تعداد درخواست های شما از میزان پردازش سرور بیشتر بود دیگر نیازی به افزایش سخت افزار سرور مثل نرم افزار های قدیمی نیست و فقط کافیه Consomer های موجود برای هر صف رو افزایش بدهیم و روی سرور های جداگونه اجرا کنیم .
استفاده از RabbitMQ و میکروسرویس پیچیدگی های خاص خودش را داره و برای پروژه های در سطح متوسط به پایین توصیه نمیشه . چون خودش باعث پیچدگی میشود .
برای اینکه بتوانید این سرویس را دیپلوی کنید، پارامترهای زیر را میتوانید مشخص کنید:
| کانفیگ | نوع | پیشفرض | توضیح |
|---|---|---|---|
| service_name | string | rabbitmq | نامی که برای سرویس مایلید در نظر گرفته شود |
| rabbitmq_username | string | rabbitmq | نام کاربری |
| rabbitmq_password | string | rabbitmq | گذرواژه |
| dashboard_enabled | boolean | false | آیا rabbitmq در محیط وب در دسترس باشد یا خیر |
| rabbitmq_plugins | string | لیست پلاگینهای RabbitMQ | |
| volume_name | string | نام volumeای که به سرویس وصل می شود | |
| volume_browser_enabled | boolean | false | آیا سرویس مدیریت Dedicated Volume برای این سرویس ساخته شود یا خی |
- برنامه نویسان
- 3k بازدید
- 3 تشکر
برای درج نظر باید وارد سایت شوید