RabbitMQ. بخش 1. مقدمه. ارلنگ، AMQP

ظهر بخیر، هابر! من می خواهم یک کتاب مرجع کتاب دانش را که موفق به جمع آوری آن شده ام به اشتراک بگذارم RabbitMQ و در توصیه ها و نتیجه گیری های کوتاه خلاصه می شود.

فهرست مندرجات

  • RabbitMQ. بخش 1. مقدمه. Erlang، AMQP و RPC
  • RabbitMQ. بخش 2. درک مبادلات
  • RabbitMQ. قسمت 3. درک صف ها و اتصالات
  • RabbitMQ. قسمت 4. درک پیام ها و فریم ها
  • RabbitMQ. قسمت 5: انتشار پیام و عملکرد مصرف
  • RabbitMQ. بخش 6. بررسی ماژول های فدراسیون و بیل
  • RabbitMQ. قسمت 7. جزئیات در مورد Connection و Chanel
  • RabbitMQ. قسمت 8. RabbitMQ در دات نت
  • RabbitMQ. بخش 9. نظارت

مختصری در مورد AMQP

AMQP (پروتکل صف پیشرفته پیام) یک پروتکل باز برای انتقال پیام بین اجزای سیستم است. ایده اصلی این است که زیرسیستم های جداگانه (یا برنامه های کاربردی مستقل) می توانند پیام ها را به شیوه ای دلخواه از طریق یک کارگزار AMQP مبادله کنند، که مسیریابی را انجام می دهد، احتمالاً تحویل را تضمین می کند، جریان های داده را توزیع می کند و در انواع پیام های مورد نظر مشترک می شود.

پروتکل AMQP سه مفهوم را معرفی می کند:

RabbitMQ. بخش 1. مقدمه. ارلنگ، AMQP

  • exchange (نقطه مبادله یا مبادله) - پیام ها به آن ارسال می شود. نقطه مبادله پیام را توزیع می کند در یک یا چند صف او پیام ها را به یک صف هدایت می کند بر اساس اتصالات ایجاد شده (binding) بین او و صف
  • queue (صف) - یک ساختار داده روی دیسک یا در RAM که پیوندهای پیام ها را ذخیره می کند و کپی هایی از پیام ها را می دهد consumers (به مصرف کنندگان)
  • binding (الزام آور) - قاعده ای که به نقطه تبادل می گوید که این پیام ها باید در کدام صف قرار گیرند

پروتکل در بالا اجرا می شود TCP / IP.

مختصری در مورد ارلنگ

کد منبع پروژه در مخزن در GitHub. معماری سرور RabbitMQ بر اساس ارلانگ و BEAM.

Erlang توسط این شرکت توسعه یافته است Ericsson در اواسط دهه 1980 به عنوان یک سیستم بلادرنگ توزیع شده، با تحمل خطا، برای برنامه هایی که نیاز به 99,999% آپتایم دارند. Erlang مورد استفاده در صنایع مختلف و کاربردهای مدرن، به عنوان مثال. WhatsApp. ادامه مطلب را می توانید در مقاله بخوانید معماری واتس اپ که فیسبوک آن را به قیمت ۱۹ میلیارد دلار خرید

مختصری در مورد RabbitMQ

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

ایده اصلی مدل پیام رسانی در RabbitMQ چیز این است producer (ناشر) پیامی را مستقیماً به صف ارسال نمی کند. در واقع، و اغلب، ناشر حتی نمی‌داند که آیا پیام اصلاً به هر صفی تحویل داده می‌شود یا خیر.

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

RabbitMQ. بخش 1. مقدمه. ارلنگ، AMQP

کار مختصر RabbitMQ را می توان به صورت زیر توصیف کرد:

  1. ناشر پیامی را به یک صرافی خاص ارسال می کند
  2. یک مبادله با دریافت پیام، آن را به یک یا چند صف مطابق با قوانین الزام آور بین خود و صف هدایت می کند.
  3. صف یک ارجاع به این پیام را ذخیره می کند. پیام خود در RAM یا روی دیسک ذخیره می شود
  4. هنگامی که مصرف کننده برای دریافت پیام از صف آماده شد، سرور یک کپی از پیام را از طریق پیوند ایجاد کرده و ارسال می کند.
  5. مصرف کننده پیام را دریافت کرده و تاییدیه را برای کارگزار ارسال می کند
  6. کارگزار پس از دریافت تاییدیه، یک کپی از پیام را از صف حذف می کند. سپس از رم و دیسک پاک می شود

RPC

روند RPC (تماس رویه از راه دور) تقریباً زیربنای تمام فعل و انفعالات با هسته است RabbitMQ. به عنوان مثال، بحث های اولیه در مورد شرایط مشتری با RabbitMQ، روند خاصی را نشان می دهد RPC. وقتی این دنباله کامل شد، RabbitMQ آماده پذیرش درخواست های مشتری خواهد بود:

RabbitMQ. بخش 1. مقدمه. ارلنگ، AMQP

همچنین در مشخصات AMQP هم کلاینت و هم سرور می توانند دستورات را صادر کنند. این بدان معنی است که مشتری منتظر ارتباط با سرور است. دستورات کلاس ها و متدها هستند. مثلا، Connection.Start - فراخوانی روش Start کلاس Connection.

اتصال و کانال ها

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

برای اینکه بتوانید دستورات را به صورت موازی ارسال کنید، باید چندین کانال را باز کنید. هر کانال یک کانال جداگانه ایجاد می کند Erlang روند. یک اتصال می تواند چندین کانال داشته باشد (مالتی پلکسینگ). برای هر کانال ساختارها و اشیاء خاصی در حافظه وجود دارد. بنابراین، هر چه تعداد کانال‌ها در یک اتصال بیشتر باشد، RabbitMQ از حافظه بیشتری استفاده می کند برای مدیریت چنین ارتباطی

RabbitMQ. بخش 1. مقدمه. ارلنگ، AMQP

یک مثال ساده از ایجاد یک اتصال و کانال با استفاده از RabbitMQ.Client:

// ...
private void TryConnect()
{
    var factory = new ConnectionFactory() 
    {
        HostName = "host_name",
        UserName = "user_name",
        Password = "p@ssword",
        // Включение автоматичекого восстановления
        // соединения после сбоев сети 
        AutomaticRecoveryEnabled = true
    };
    _connection = factory.CreateConnection();
}
// ...
public void CreateChanel()
{
    _channel = _connection.CreateModel();
    // other options 
}

باز کردن یک اتصال جدید برای هر عملیات به شدت ممنوع است منجر به هزینه های بالایی خواهد شد. کانال‌ها نیز باید پایدار باشند، اما بسیاری از خطاهای پروتکل باعث بسته شدن کانال می‌شوند، بنابراین طول عمر کانال ممکن است کوتاه‌تر از عمر اتصال باشد.

RabbitMQ کجا استفاده می شود؟

در زمینه میکروسرویس ها، پروتکل AMQP و اجرای آن در RabbitMQ اغلب برای استفاده می شود تعامل ناهمزمان بین خدمات

در زمینه IIOT پروتکل AMQP و اجرای آن در RabbitMQ برای تبادل داده بین سرورها (سرور-سرور) استفاده می شود. همچنین از افزونه استفاده کنید پلاگین MQTT RabbitMQ که اجرای پروتکل است MQTT برای انتقال داده ها بین سنسور و سرور در محیط های کم سرعت و با تأخیر بالا (لیست کامل پروتکل های پشتیبانی شده در وب سایت پروژه).

در مقاله بعدی با جزئیات بیشتر به درک مبادلات خواهیم پرداخت.

مراجع

منبع: www.habr.com

اضافه کردن نظر