معرفی RabbitMQ: بخش اول، RabbitMQ چیست؟

فهرست بخش های این آموزش:


یکی از فایده های استفاده از Queue ها این است که درصورت Offline بودن بخشی از سیستم در معماری های Microservice خطا های احتمالی را کاهش می دهد. اگر بخشی از سیستم در دسترس نبود، باقی سیستم ها میتوانند تعامل خود را با Queue ادامه دهند.

صف بندی پیام ها یا Message Queuing مهمترین قسمت در معماری میکروسرویس است؛ این یکی از راه هایی است که میتوان داده ها را بین سرویس های مختلف جابجا کرد.

نرم افزار RabbitMQ یکی از Message Broker های پر استفاده در جهان است، دارای بیش از 35,000 استفاده کننده از استارپ ها تا پروژه های تجاری بزرگ.


صف بندی پیام ها این امکان را میدهد که سرویس ها به طور غیر همزمان(Asynchronous) با یکدیگر ارتباط داشته باشند، به عبارت دیگر سرویس هایی که پیام ها را ارسال و دریافت می کنند، با صف تعامل دارند به جای اینکه مستقیما با یکدیگر تعامل داشته باشند.

تولید کننده پیام(Message Producer) پیام خود را در صف قرار میدهد بدون اینکه منتظر بماند تا آن ها پردازش شوند.

معرفی Exchange:

پیام ها مستقیما در صف ها قرار نمیگیرند؛ به جای آن، Producer پیام خود را برای Exchange ارسال میکند. سپس Exchange پیام ها را از Producer دریافت میکند و آنها را به سمت Queue مناسب میفرستد(Route می کند). این کار با کمک Binding ها و Routing Key ها انجام می شود. Binding یک اتصال بین Queue و Exchange است.

جریان پیام(Message Flow) در RabbitMQ:

1. فرستنده(Producer) یک Message را با Exchange مشخص ارسال می کند؛ درصورت مشخص نکردن Exchange مقدار پیش فرض Direct درنظر گرفته خواهد شد.

2. پس از ارسال پیام، Exchange پیام را دریافت میکند و اکنون عهده دار Route کردن پیام به سوی Queue مناسب است. Exchange بسته به Exchange type مشخص شده از روش های مختلفی برای Route کردن Message استفاده می کند (در ادامه انواع Exchange type ها معرفی می شوند)

3. در عکس پایین ما دو Binding از Exchange به دو Queue مختلف داریم. Exchange پیام را به سمت Queue درست Route میکند

4. این پیام ها تا زمانی که گیرنده(Consumer) آن ها را پردازش کند در داخل Queue قرار خواهند گرفت

5. سپس Consumer پیام های پردازش شده را از لیست حذف میکند.

انواع Exchange ها:

  • نوع Direct: یک Direct Exchange براساس Routing Key مشخص شده در پیام، پیام ها را به سمت Queue ها Route میکند. در Direct Exchange پیام به سمت Queue مناسب که Binding key آن دقیقا مطابق Routing key پیام باشد هدایت میشود. برای مثال، اگر Queue برای Bind شدن به Exchange از "pdfprocess" به عنوان Binding key استفاده کند، یک پیام ارسال شده به سمت Exchange با Routing key حاوی "pdfprocess" به سمت این صف ارسال خواهد شد.
  • نوع Topic: یک Topic Exchange از Pattern برای انطباق Routing key موجود در پیام و Binding key موجود در Binding استفاده می کند.
  • نوع Fanout: یک Fanout Exchange پیام ها را به سمت همه Queue های Bind شده به این Exchange ارسال می کند.
  • نوع Header: یک Header Exchange از Attribute های موجود در Header پیام برای مسیریابی استفاده می کند.


مفاهیم RabbitMQ:

  • مفهوم Producer: اپلیکیشنی که پیام را ارسال می کند.
  • مفهوم Consumer: اپلیکیشنی که پیام را دریافت می کند.
  • مفهوم Queue: بافر برای ذخیره سازی پیام ها.
  • مفهوم Message: دیتا ارسال شده از طرف Producer به Consumer به واسطه RabbitMQ.
  • مفهوم Connection: اتصال TCP بین اپلیکیشن و RabbitMQ broker.
  • مفهوم Channel: یک اتصال مجازی در یک اتصال اصلی. انتشار یا دریافت پیام، همه با Channel انجام میشود.
  • مفهوم Exchange: دریافت پیام از Producer ها و Push کردن آنها روی Queue بسته به قوانین تعریف شده در Exchange type. یک صف احتیاج دارد که به حداقل یک Exchange مقید شده باشد تا بتواند پیام ها را دریافت کند.
  • مفهوم Binding: اتصال بین Queue و Exchange.
  • مفهوم Routing key: یک کلید در Message که Exchange با استفاده از آن تصمیم می گیرد چطور پیام را به سمت صف Route کند. Routing key را به عنوان آدرس مقصد پیام درنظر بگیرید.
  • مفهوم AMQP: مخفف Advanced Message Queuing Protocol، پروتکل اصلی مورد استفاده برای Messaging در RabbitMQ.
  • مفهوم Users: این امکان وجود دارد که به وسیله نام کاربری و رمز عبور و مجوز های دسترسی مشخص شده به RabbitMQ وصل شد. همچنین میتوان برای کاربران مجوز دسترسی به Virtual host خاص تعیین کرد.
  • مفهوم VHost: برای تفکیک اپلیکیشن هایی که درحال استفاده از RabbitMQ هستند از Virtual Host استفاده میکنیم. کاربران مختلف میتوانند دسترسی های مختلفی به VHost ها و Queue ها و Exchange های مختلف داشته باشند.
  • مفهوم Acknowledgments and Confirms: شاخص هایی برای مشخص کردن اینکه پیام دریافت شد یا پردازش شد. Acknowledgements میتواند در هر دو طرف استفاده شود؛ برای مثال، یک Consumer میتواند به سرور اطلاع بدهد که پیام دریافت یا پردازش شد، و سرور هم میتواند همچنین گزارشی را به Producer بدهد.

نصب و استفاده از RabbitMQ در ویندوز:

پیش از نصب RabbitMQ احتیاج به نصب ورژن سازگار Erlang با RabbitMQ داریم.

برای دانلود RabbitMQ اینجا کلیک کنید.

برای دیدن ورژن سازگار Erlang با RabbitMQ اینجا کلیک کنید.

برای دانلود Erlang اینجا کلیک کنید.

پس از نصب RabbitMQ احتیاج داریم که پنل مدیریت تحت وب آن را فعال کنیم برای این منظور، کامند لاین را باز کرده و به آدرس زیر یا آدرسی که RabbitMQ را نصب کردید بروید:

C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.9\sbin

دستور زیر را در کامند لاین وارد کنید تا پنل مدیریت تحت وب شما آماده شود:

rabbitmq-plugins enable rabbitmq_management

اکنون رابط مدیریت RabbitMQ در آدرس http://localhost:15672 در دسترس است. نرم افزار RabbitMQ پنل مدیریت تحت وب راحتی را برای مدیریت و مانیتورینگ سرور فراهم آورده.

در بخش های بعد یاد خواهیم گرفت که چطور از این رابط مدیریت استفاده کنیم.

در بخش های بعدی مباحث پیشرفته تری را از RabbitMQ یاد میگیریم.

این مطالب در کانال تلگرام قرار گرفت. می توانید از تلگرام هم من را دنبال کنید.

https://t.me/Dev_EhsanHosseini