Message Broker چیست؟

در این مقاله قصد داریم انواع روش ارتباط بین میکروسروس ها و کلیاتmessage Brokerرا به شما آموزش دهیم.قبل از شروع آموزش بهتر است ابتدا شما را کمی با معماری میکروسرویس آشنا کنم. در معماری میکروسرویس یک سیستم به چند زیرسیستم تقسیم می‌شود که همان میکروسرویس‌ها هستند هر یک از این بخش‌ها یا میکروسرویس‌ها به‌صورت کاملاً مجزا از یکدیگر کار می‌کنند و حتی هرکدام می‌توانند با زبان برنامه‌نویسی خاص خودشان پیاده‌سازی شوند و دیتابیس جداگانه خود را دارند. با این توضیحات باید این سؤال برای شما پیش بیاید که اگر این میکروسرویس‌ها کاملاً از یکدیگر مجزا هستند پس چگونه با یکدیگر تبادل اطلاعات می‌کنند و باهم یک سیستم بزرگ را تشکیل می‌دهند؟در دوره رایگان آموزش میکروسرویس سایت باگتو ما به شما آموزش دادیم که میکروسرویس ها به چه صورت با هم در ارتباط هستن. در معماری میکروسرویس برای ارتباط بین میکروسرویس‌ها دو روش وجود دارد:) روش Sync2) روش asyncدر روش Sync برای ارتباط بین میکروسرویس‌ها می‌توانیم از (rest و http) استفاده کنیم که در این روش باید یک url یا همان Api را از سرویس موردنظر کال کنیم و یک request ارسال کنیم و درون http response خودمان را دریافت کنیم که در این روش از زمانی که request ارسال می‌شود تا زمانی که response آن دریافت می‌شود سیستم در حالت انتظار می‌ماند.در روش async ما می‌توانیم درخواست خودمان را برای سرویس موردنظر ارسال کنیم و دیگر منتظر پاسخ آن نمانیم و حتی می‌توانیم درخواست‌های متعددی را ارسال کنیم و آنها را درون یک صف بریزیم و به کار خود ادامه دهیم و هر زمان که سرویس موردنظر پاسخ را ارسال کرد آنها را دریافت کنیم.برای اینکه تفاوت روش Sync و async بیشتر برای شما روشن شود یک مثال ساده می‌زنیم:روش asyncفرض کنید که شما به یک رستوران می‌روید و یک غذا سفارش می‌دهید و در حین اینکه غذای شما در حال آماده‌شدن است گارسون سر میزهای دیگر می‌رود و سفارش بقیهٔ مشتری‌ها را می‌گیرد که به این روش async گفته می‌شود.روش syncحالا فرض کنید گارسون سفارش شمارا می‌گیرد و تا زمانی که غذایی که شما سفارش دادید را به دستتان نرساند سراغ بقیه مشتری‌ها نمی‌رود که به این روش sync گفته می‌شود.Message Brokerبرای روش (sync) که در بالا گفتیم از (rest و http) استفاده می‌کنیم اما برای اینکه ارتباط (async) را برقرار کنیم به (Message Broker) نیاز داریم.در تصاویر زیر چگونگی این دو روش به‌وضوح مشخص است.روش syncدر این روش برای هر ارتباط باید آدرس و url مستقیم هر سرویس مشخص باشد و هر دو طرف رابطه باید به یکدیگر دسترسی مستقیم داشته باشند که کاملاً در تصویر بالا مشخص است که چه آشفتگی به وجود می‌آید.روش asyncدر روش async همان‌طور که مشخص است از Message Broker برای ارتباط بین میکروسرویس‌ها استفاده شده است.تا اینجا توضیحات مقدماتی برای شناخت کلی و کاربرد Message Broker بود که کاربرد اصلی Message Broker رو گفتیم.حال به توضیح بیشتر Message Broker میپردازیم:تعریف Message Broker: مسیج بروکر یک‌لایه ارتباط بین میکروسرویس‌ها است که اگر هرکدام از میکروسرویس‌ها بخواهند پیغامی برای سرویس دیگر بفرستند پیغام خود را روی Message Broker می‌فرستند و گیرنده پیغام خود را ازروی Message Broker دریافت می‌کند.مسیج بروکر صف‌هایی را برای هر سرویس ایجاد می‌کند که پیغام‌ها را می‌توانیم به آن صف ارسال کنیم که اگر گیرنده در دسترس نبود یا به هر دلیلی پاسخ را با تأخیر فرستاد بتواند درخواست‌های دیگر را از صف مربوطه دریافت کند. تعداد صف‌ها در مسیج بروکر نامحدود است.در این روش نیاز نیست که دو طرف ارتباط از آدرس یکدیگر اطلاع داشته باشند و یا به‌صورت مستقیم با یکدیگر ارتباط داشته باشند و تمامی تبادلات از طریق Message Broker انجام می‌شود.Message-Brokerهمانطور که در تصویر بالا مشخص است در این نوع ارتباط سه بخش داریم یک فرستنده یا همان (publisher) یک گیرنده یا همان (Consumer) یک لایه واسط یا همان MessageBroker که در اینجا RabbitMQ استفاده شده است.در این روش فرستنده پیغام خود را برای مسیج بروکر(RabbitMQ)ارسال می‌کند که در قسمت Exchange در RabbitMQ قرار می‌گیرد و وظیفه Exchange است که این پیغام را به کدام صف یا صف‌ها بفرستد یا حتی برای کلیه صف‌ها ارسال کند و گیرنده نیز پیغام را از صف‌هایی که دسترسی دارد دریافت می‌کند و در آخر که پردازش خود را روی پیغام انجام داد به Queue موردنظر اعلام می‌کند که درخواستی که کارش تمام شده است از روی صف حذف کند.برای استفاده از MessageBroker ابزارها و نرم‌افزارهای بسیاری توسعه داده شده است که ما می‌توانیم از آنها استفاده کنیم. در این مقاله ما چند نمونه از این ابزارها را معرفی می‌کنیم و یکی از مهم‌ترین آنها را توضیح می‌دهیم.انواع نرم‌افزار برای استفاده از مسیج بروکر (MessageBroker):ActiveMQ -1این نرم‌افزار با زبان جاوا توسعه داده شده است و سال‌ها پیش تولیدشده است و تجربه زیادی در این زمینه دارد.Kafka -2این نیز یک مسیج بروکر خوب به‌حساب می‌آید و می‌توانیم از آن هم استفاده کنیم.RabbitMQ -3و اما (RabbitMQ) که امروزه خیلی طرف‌دار دارد ونرم افزار بسیار پرکاربرد خوبی است و این محبوبیت به دلیل سادگی این نرم‌افزار و همچنین مستندات زیادی که برای آن وجود دارد باشد و همچنین ما می‌توانیم به‌راحتی در هر زبان برنامه‌نویسی از آن استفاده کنیم.ابزار های بسیاری دیگر وجود دارند برای پیاده سازی MessageBroker که ما قصد داریم در این مقاله به توضیح (RabbitMQ) که از محبوبیت بسیاری برخوردار است بپردازیم.قبل از اینکه بخواهیم از (RabbitMQ) استفاده کنیم باید (RabbitMQ-Server) را روی سیستم خود نصب کنیم که برای دانلود آن می‌توانیم وارد سایت:https://www.rabitmq.comبشویم و وارد قسمت Get Started که در تصویر زیر مشخص شده بشویم:وسپس همانطور که در تصویر زیر مشخص شده است روی دکمه دانلود کلیک کنیم:و در صفحه‌ای که مشاهده می‌کنید همان‌طور که در تصویر زیر مشخص شده است در قسمت دایرکت دانلود آخرین نسخه را دانلود کنید:توجه داشته باشید چون (RabbitMQ)با زبان (Erlang)توسعه داده شده است برای اجرای این فایل باید Erlang را قبل از نصب RabbitMQ نصب کنیم تا به Error برخورد نکنیم. برای دانلود erlang به آدرس زیر مراجعه کنید:https://www.erlang.orgهمانند تصویر زیر روی دکمه دانلود کلیک کنید تا به صفحه دانلود بروید:و سپس باتوجه‌به سیستم‌عامل خود یکی از گزینه‌های دانلود را همانند تصویر زیر انتخاب کنید و سپس بعد از دانلود آن را نصب کنید و بعد از نصب erlang حال ربیت ام کیو را نیز نصب کنید:نکته مهم:بعد از نصب (RabbitMQ) شما می‌توانید از منوی استارت روی گزینه RabbitMQService - start که بعد از نصب برای شما اضافه می‌شود همانند تصویر زیر کلیک کنید تا بتوانید از ربیت ام کیو استفاده کنید:و همچنین برای دستورات کامندی می‌توانید از Rabbit MQ Command Prompt استفاده کنید.همانند تصویر زیر:امیدوارم که در این مقاله توانسته باشیم شما را با MessageBroker بحوبی آشنا کرده باشیم، اما اگر میخواهید روی این موضوع مسلط شوید و بصورت کاربردی آنرا یاد بگیرید باید به دوره ستارگان میکروسرویس سایت باگتو مراجعه کنید زیرا در این دوره ما بصورت کاربردی MessageBroker را آموزش داده ایم .