RabbitMQ چیست؟ برای مبتدیان ، به توضیح اینکه RabbitMQ و صفبندی پیامها چیست میپردازد که روشی برای تبادل دادهها بین فرآیندها، برنامهها و سرورها است.
درک روشنی از پیام رسانی میدهد و مفهومهای حائز اهمیت را تعریف میکند.
این مقاله مراحلی که باید هنگام راه اندازی یک اتصال طی شود و انتشار/استفاده پیامها از یک صف را توضیح میدهد.
RabbitMQ چیست؟
RabbitMQ یک نرم افزار صف بندی پیام به نام واسطهی پیام یا مدیریت صف است.
بطور ساده، نرم افزاری است که در آن صفها میتوانند تعریف شوند، برنامهها ممکن است به صف متصل شده و یک پیام به آن انتقال دهند.
RabbitMQ چیست؟
یک پیام میتواند حاوی هر نوع اطلاعاتی باشد.
برای مثال، میتواند اطلاعاتی در رابطه با فرآیند/وظیفهای داشته باشد که باید در برنامه دیگری شروع شود (که میتواند در سرور دیگری باشد)، یا میتواند تنها یک پیام ساده باشد.
نرم افزار مدیریت صف، پیامها را تا زمانیکه یک برنامه گیرنده متصل شده و یک پیام را از صف بردارد، ذخیره میکند.
برنامه گیرنده ، سپس پیام را به روشی مناسب پردازش میکند.
تمام مقالات مربوط به شروع کار با RabbitMQ میتوانند تحت یک کتاب الکترونیکی رایگان از اینجا دانلود شوند.
مثال RabbitMQ
یک واسطهی پیام به عنوان یک فرد میانی برای سرویسهای مختلف عمل کند (برای نمونه یک برنامه تحت وب، در این مثال).
میتوانند جهت کاهش بار و زمان تحویل توسط سرور برنامههای تحت وب استفاده شوند از آنجاییکه وظایف، که بطور معمول مقدار زمانی را جهت پردازش صرف میکنند، میتوانند به یک شخص ثالث/ واسطه که تنها کار آن اجرای آنها است، محول شوند.
در این راهنما سناریویی را دنبال میکنیم که در آن یک برنامهی تحت وب به کاربران اجازه میدهد تا اطلاعات را بر روی یک وبسایت بارگذاری/آپلود کنند.
سایت این اطلاعات را مدیریت کرده و یک PDF را تولید و مجدد به کاربر ایمیل خواهد کرد.
مدیریت اطلاعات، تولید PDF و ارسال ایمیل در مورد این مثال چندین ثانیه زمان خواهد برد و این یکی از دلایل چرایی استفاده از یک صف پیام است.
هنگامیکه کاربر اطلاعات کاربری را در رابط وب وارد کرد، برنامه تحت وب یک وظیفه “پردازش/فرآیند PDF” و تمامی اطلاعات را در یک پیام خواهد گذاشت و پیام در یک صف تعریف شده در RabbitMQ قرار خواهد گرفت.
RabbitMQ چیست؟
معماری پایهی یک صف پیام ساده است، برنامههای سرویس گیرندهای به نام تولیدکنندگان وجود دارد که پیامها را ایجاد و به واسطه (صف پیام) میرسانند.
دیگر برنامهها، به نام مصرفکنندگان، به صف متصل شده و به اشتراک پیامهایی که باید پردازش شوند در میآیند.
یک نرم افزار میتواند یک تولید کننده باشد، یا مصرف کننده، یا هم یک مصرف کننده باشد و هم یک تولیدکنندهی پیامها.
پیامهایی که در صف قرار گرفتهاند تا زمانی که مصرف کننده آنها را بازیابی کند، ذخیره میشوند.
چه زمان و چرا باید از RabbitMQ استفاده کنید؟
صف بندی پیام به سرورهای وب اجازه میدهد تا به سرعت به درخواستها پاسخ دهند، به جای اینکه اجبار به اجرای روندهایی با منابع سنگین در محل شوند.
صف بندی پیام هنگامیکه بخواهید یک پیام را بین چندین گیرنده جهت مصرف/بکارگیری توزیع کنید یا برای تعدیل بارها بین کارکنان نیز مفید است.
مصرف کننده میتوانند یک پیام را از صف برداشته و شروع به پردازش PDF کند همزمان با اینکه تولیدکننده در حال صف بندی پیامهای جدید در صف است.
مصرف کننده میتواند در یک سرور کاملا متفاوت از منتشرکننده باشد، یا میتوانند در یک سرور یکسان قرار داشته باشند.
درخواست میتواند به یک زبان برنامهنویسی ایجاد شده و به زبان برنامهنویسی دیگری مدیریت شود.
دو برنامه تنها از طریق پیامهایی که به یکدیگر میفرستند در ارتباط خواهند بود.
بدین جهت، دو برنامه ارتباطی پایین (low coupling) بین فرستنده و گیرنده خواهند داشت.
RabbitMQ چیست؟
- کاربر یک درخواست ایجاد PDF به برنامهی تحت وب ارسال میکند.
- برنامه تحت وب (تولید کننده) یک پیام حاوی دادههایی از درخواست مانند نام و ایمیل، به RabbitMQ میفرستد.
- یک تبادل، پیامهایی از یک برنامهی تولیدکننده را پذیرفته و آنها را برای تصحیح صفها جهت ایجاد PDF مسیردهی میکند.
- کارکن پردازش PDF (مصرفکننده) وظیفه را دریافت کرده و پردازش PDF را شروع میکند.
تبادلات
پیامها مستقیماً در یک صف انتشار نمییابند، در عوض، تولیدکننده پیامها را به یک تبادل میفرستد.
یک تبادل مسئول مسیردهی پیامها به صفهای مختلف است.
یک تبادل پیامهایی از برنامهی تولیدکننده را پذیرفته و آنها را با کمک اتصالات و کلیدهای مسیریابی به صفهای پیام مسیردهی میکند.
یک اتصال، لینکی میان یک صف و یک تبادل است.
RabbitMQ چیست؟
جریان پیام در RabbitMQ :
- تولیدکننده یک پیام را در یک تبادل منتشر میکند. هنگامی که تبادل را ایجاد میکنید، باید نوع آن را مشخص کنید. انواع مختلف تبادلات بطور مفصل در ادامه توضیح داده شدهاند.
- تبادل پیام را دریافت میکند و اکنون موظف به مسیردهی پیام است. تبادل، صفات مختلف پیام، مانند کلید مسیریابی، را بسته به نوع تبادل مدنظر قرار میدهد.
- اتصالات باید از تبادل به صفها ایجاد شوند. در این مورد، دو اتصال به دو هدف مختلف از تبادل را میبینیم. تبادل، پیام را بسته به صفات پیام به صفها مسیردهی میکند.
- پیامها تا زمانی که توسط یک مصرفکننده مدیریت شوند، در صف میمانند.
- مصرفکننده، پیام را مدیریت میکند.
انواع تبادلات
در بخش دوم آموزش، تنها از تبادلهای مستقیم استفاده شدهاست.
درک عمیقتر در رابطه با انواع مختلف تبادل، کلیدهای مسیریابی و اینکه چطور/چه زمان باید از آنها استفاده کنید در بخش چهارم در رابطه با تبادلات قابل دسترسند: بخش چهار، RabbitMQ برای مبتدیان – تبادلات، کلیدهای مسیریابی و اتصالات.
RabbitMQ چیست؟
مستقیم (Direct): یک تبادل مستقیم پیامها را براساس یک کلید مسیریابی پیام به صفها تحویل میدهد.
در یک تبادل مستقیم، پیام به صفهایی مسیردهی میشود که کلید اتصال آنها دقیقاً با کلید مسیریابی پیام مطابقت میکند.
اگر صف با کلید اتصال pdfprocess به تبادل وابسته باشد، پیامی که با یک کلید مسیریابی pdfprocess در تبادل انتشار یافته، به آن صف مسیردهی میشود.
پهنای خروجی (Fanout): یک تبادل پهنای خروجی پیامها را به تمامی صفهای وابسته به خود مسیردهی میکند.
موضوع/عنوان (Topic): تبادل عنوان، یک تطابق نویسههای جانشین (wildcard) بین کلید مسیریابی و الگوی مسیریابی مشخص شده در اتصال انجام میدهد.
هدرها (Headers): تبادلات هدرها از صفت هدر (سرتیتر) پیام برای مسیردهی استفاده میکنند.
مفاهیم RABBITMQ و SERVER
در اینجا برخی مفاهیم مهم که نیاز است پیش از اینکه بیشتر به اعماق RabbitMQ برویم/توضیح داده شوند آمده است.
میزبان مجازی پیشفرض، کاربر پیشفرض و مجوزهای پیشفرض در مثالهایی که در ادامه آمده استفاده شدهاند، اما همچنان درک چیستی آنها خالی از لطف نیست.
تولیدکننده (Producer): برنامهای که پیامها را دریافت میکند.
صف (Queue): بافری (حافظهی موقت/میانی) که پیامها را ذخیره میکند.
پیام (Message): اطلاعاتی که از طریق RabbitMQ تولیدکننده به یک مصرفکننده ارسال میشود.
پیوند (Connection): یک پیوند، پیوند TCP بین برنامه شما و واسطهی RabbitMQ است.
کانال (Channel): یک کانال، پیوندی مجازی درون یک پیوند است. هنگامیکه در حال انتشار یا مصرف پیامهایی از یک صف هستید- همگی بر روی یک کانال انجام میشود.
تبادل (Exchange): پیامهایی را از تولیدکنندگان دریافت و آنها را بسته به قوانین تعریف شده توسط نوع تبادل، در صفها قرار میدهد. برای دریافت پیامها، یک صف نیاز است که حداقل به یک تبادل وابسته باشد.
اتصال (Binding): یک اتصال، لینکی بین یک صف و یک تبادل است.
کلید مسیریابی (Routing Key): کلید مسیریابی، کلیدی است که تبادل جهت تصمیمگیری نحوهی مسیردهی پیام به صفها به آن نگاه میکند. کلید مسیریابی مانند یک آدرس برای پیام است.
Advanced Message Queuing Protocol : AMQP (پروتکل صفبندی پیام پیشرفته) پروتکلی مورد استفادهی RabbitMQ جهت پیامرسانی است.
کاربران (Users): امکان اتصال به RabbitMQ با یک نامکاربری و رمزعبور معین وجود دارد.
میتوان به همهی کاربران مجوزهایی مانند حقوق خواندن، نوشتن و پیکربندی قوانین درون نمونه اختصاص دارد.
همچنین میتوان به کاربران مجوزهایی به میزبانهای مجازی به خصوصی دادهشود.
میزبان مجازی (Vhost, Virtualhost): یک میزبان مجازی روشی برای جداسازی برنامهها با استفاده از نمونهی RabbitMQ یکسانی فراهم میکند.
کاربران مختلف میتوانند مزایای دسترسی متفاوتی به میزبان مجازی متفاوتی داشته باشند و صفها و تبادلات میتوانند ایجاد شوند، بنابراین تنها در یک میزبان مجازی وجود دارند.
در ابتدای این سری مقالات، یک تولیدکننده (برنامهی وبسایت) و یک مصرفکننده (برنامه ی پردازش PDF) داشتیم.
اگر برنامهی پردازش PDF متوقف شده/از کار بیفتد، یا اگر تعداد زیادی درخواست PDF همزمان در حال آمدن باشند، پیامها در صف انباشته خواهد شد تا زمانی که مصرفکننده دوباره شروع به کار کند.
پس تمامی پیامها را یک به یک پردازش خواهد کرد.
تنظیم و راهاندازی یک نمونه RabbitMQ
برای اینکه بتوانید این راهنما را دنبال کنید، نیاز است که یک نمونهی CloudAMQP تنظیم و راهاندازی کرده یا نیاز است RabbitMQ را دانلود و نصب کنید.
CloudAMQP یک راه حل میزبانی شدهی RabbitMQ است.
بدین معنی که تمام کاری که نیاز است انجام دهید، این است که برای یک حساب ثبتنام کرده و یک نمونه ایجاد کنید.
نیاز نیست RabbitMQ را راهاندازی و نصب کرده یا به مدیریت خوشه/دسته اهمیتی بدهید، CloudAMQP این کار را برای شما انجام خواهد داد.
CloudAMQP با طرح/برنامه (Plan) میتواند به رایگان مورد استفاده قرار گیرد.
به صفحه طرح/برنامه رفته و برای هر طرحی ثبتنام کرده و یک نمونه ایجاد کنید.
RabbitMQ چیست؟
هنگامیکه نمونه شما ایجاد شد، جزئیات را بفشارید تا نمونهتان، نامکاربری، رمزعبور و URL پیوند خود را برای نمونهی میزبانی شدهی ابری RabbitMQ شما بیابد.
RabbitMQ چیست؟
شروع کار با RabbitMQ
بلافاصله پس از اینکه یک نمونهی RabbitMQ ایجاد شد، امکان ارسال یک پیام بین زبانها، پلتفرمها و سیستمعامل وجود دارد.
این روش مدیریت پیامها، پردازشهای شما را جدا کرده و سیستمی بسیار مقیاسپذیر ایجاد میکند.
اکنون میتوانید با بازکردن رابط مدیریت شروع کرده، تا دید کلی از سرور RabbitMQ خود پیدا کنید.
رابط مدیریت – مدیریت و نظارت
RabbitMQ یک رابط کاربری تحت وب برای مدیریت و نظارت سرور RabbitMQ شما ارائه میدهد.
رابط مدیریت RabbitMQ بطور پیشفرض در CloudAMQP فعال است و میتوانید لینکی را در صفحهی جزئیات برای نمونهی CloudAMQP خود بیابید.
از بخش رابط مدیریت، امکان مدیریت، ایجاد، حذف و فهرست کردن صفها وجود دارد.
امکان نظارت بر طول صفها، بررسی نرخ پیام، تغییر و افزودن مجوزهای کاربران و بسیاری دیگر وجود دارد.
RabbitMQ چیست؟
اطلاعات بیشتر در رابطه با رابط مدیریت در قسمت ۳ – رابط مدیریت قابل دسترس است.
انتشار و اشتراک پیامها
RabbitMQ بطور پیشفرض به زبان یک پروتکل به نام AMQP صحبت میکند.
برای اینکه قادر به برقراری ارتباط با RabbitMQ شوید، نیاز به کتابخانهای دارید که همان پروتکل RabbitMQ را درک کند.
نیاز است کتابخانه سرویس گیرنده برای زبان برنامهنویسی که قصد استفاده برای برنامهی خود دارید را دانلود کنید.
یک کتابخانه سرویسگیرنده یک رابط برنامهنویسی برنامهها (API) برای استفاده در نوشتن برنامههای سرویسگیرنده است.
یک کتابخانهی سرویسگیرنده چندین متد قابل استفاده، در این مورد، برای برقراری ارتباط با RabbitMQ دارد.
متدها باید در زمانیکه شما، برای مثال، به واسطهی RabbitMQ متصل میشوید، استفاده شوند (با استفاده از پارامترها، نام میزبان، شماره درگاه معین و …) یا هنگامیکه یک صف یا یک تبادل را اعلان میکنید.
تقریباً برای همهی زبانهای برنامهنویسی یک انتخاب کتابخانه وجود دارد.
مراحلی که به هنگام راه اندازی یک پیوند و انتشار یک پیام/استفادهی یک پیام باید دنبال شود:
- اول از همه، نیاز است یک شیء پیوند راه اندازی/ایجاد کنیم. در اینجا، نام کاربری، رمز عبور، URL پیوند، درگاه و …تعیین خواهند شد. یک پیوند TCP بین برنامه و RabbitMQ هنگامیکه متد start فراخوانی شود، راه اندازی خواهد شد.
- ثانیا نیاز است که یک کانال باز شود. نیاز است که یک کانال در پیوند TCP ایجاد شود. رابط پیوند میتواند برای باز کردن یک کانال استفاده شود و هنگامیکه کانال باز شد، میتواند برای ارسال و دریافت پیام ها استفاده شود.
- یک صف اعلان/ایجاد کنید. اعلان یک صف موجب خواهد شد که اگر از قبل موجود نباشد، ایجاد شود. تمامی صفها پیش از اینکه بتوانند مورد استفاده قرار بگیرند، نیاز به اعلان دارند.
- در (به) مشترک/مصرف کننده: تبادلات را راه اندازی و یک صف را به یک تبادل متصل میکند. تمامی تبادلات پیش از اینکه بتوانند مورد استفاده قرار بگیرند باید اعلان شوند. یک تبادل پیامها را از یک برنامهی تولید کننده پذیرفته و آنها را به صفهای پیام مسیردهی میکند. برای اینکه پیام ها به صف ها مسیردهی شوند، نیاز است که صف ها به یک تبادل وابسته باشند.
- در (به) منتشر کننده: یک پیام را در یک تبادل منتشر میکند.
- در (به) مشترک/مصرف کننده: یک پیام از یک صف را استفاده میکند.
- کانال و پیوند را میبندد.
کد نمونه
کد نمونه در قسمت ۲ ارائه خواهد شد، شروع کار با قسمت ۱.۲ – Ruby، به دنبال آن قسمت ۲.۲ – Node.js، و قسمت ۳.۲ – Python، امکان استفاده از زبان های مختلف و برنامه نویسی در بخش های مختلف سیستم وجود دارد.
برای مثال، منتشر کننده میتواند با node.js و مشترک (subscriber) با Python نوشته شود.
امیدوارم این مقاله RabbitMQ چیست؟ کمی در فهم RabbitMQ به شما کمک کرده باشد!
توضیحات خیلی خوب بود ممنون
۱۰
ممنون از انتشار مقاله.
نقدی که وارد هست بر این مقاله، انسجام مطلب وجود ندارد و گویا قسمتهایی توسط ماشین ترجمه شده است.
۱۱
با سلام
میشه لطف کنید بگید از نظر شما کدام قسمت ها توسط ماشین ترجمه شده است؟
با تشکر
۱۳