RabbitMQ. بخش 2. درک مبادلات

Exchange - مبدل یا نقطه مبادله. پیام هایی برای آن ارسال می شود. Exchange پیام را توزیع می کند در یک یا چند صف او پیام ها را به یک صف هدایت می کند بر اساس اتصالات ایجاد شده (bindings) بین او و صف.

Exchange نیست فرآیند ارلنگ. به دلایل مقیاس پذیری exchange - این یک خط (پیوند به یک ماژول با کدی است که منطق مسیریابی در آن قرار دارد) در پایگاه داده داخلی فراموشی. 1 هزار مبدل تنها 1 مگابایت حافظه مصرف می کنند.

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

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

تبادل مستقیم

Direct exchange - در صورت نیاز استفاده می شود ارسال پیام به صف های خاص. پیام با یک مشخصه برای مبدل منتشر می شود کلید مسیریابی و وارد تمام صف هایی می شود که با یک کلید مسیریابی مشابه به این مبدل متصل می شوند. کلید مسیریابی یک رشته است. با استفاده از تطبیق یافت می شود بررسی رشته ها برای هم ارزی.

نمایش گرافیکی جریان پیام:

RabbitMQ. بخش 2. درک مبادلات

В rabbitmq یک مفهوم وجود دارد مبدل پیش فرضاست. آن direct exchange بدون نام. اگر از مبدل پیش فرض استفاده شود، پیام به یک صف با نامی برابر هدایت می شود کلید مسیریابی پیام.

تبادل موضوع

Topic exchange - مشابه direct exchange با مقایسه کلید مسیریابی، مسیریابی انتخابی را فعال می کند. اما، در این مورد، کلید داده شده است توسط الگو. هنگام ایجاد یک الگو، استفاده کنید 0 یا کلمات بیشتر (حروف AZ и az و اعداد 0-9، با یک نقطه و همچنین نمادها از هم جدا شده اند * и #.

  • * - می توان دقیقا جایگزین کرد 1 کلمه
  • # - قابل تعویض با 0 یا کلمات بیشتر

نمایش گرافیکی جریان پیام:

RabbitMQ. بخش 2. درک مبادلات

از نسخه RabbitMQ 2.4.0 الگوریتم مسیریابی برای topic exchange شروع به کار کرد تا اینکه 145 بار سریعتر آنها با ارائه یک رویکرد به این مهم دست یافتند اجرا را امتحان کنید، که شامل نمایش الگوها به عنوان یک ساختار درختی است. به عنوان مثال قالب ها a.b.c, a.*.b.c, a.#.c и b.b.c با ساختار زیر نشان داده خواهد شد:

RabbitMQ. بخش 2. درک مبادلات

جستجوی تطبیق یک الگو با شروع از ریشه و ادامه از بالا به پایین انجام می شود.

ویژگی ها:

  • استفاده از این مبدل می تواند تبدیل شود یک انتخاب خوب برای توسعه احتمالی برنامه در آینده، زیرا همیشه می توان قالب ها را سفارشی کرد تا پیام به همان روش منتشر شود direct exchange یا fanout exchange
  • قالب هایی که استفاده می کنند * خیلی سریعترنسبت به قالب هایی که استفاده می کنند #.
  • topic exchange آرام تر direct exchange

تبادل Fanout

Fanout exchange - همه پیام ها به تمام صف ها تحویل داده می شوند حتی اگر یک کلید مسیریابی در پیام مشخص شده باشد.

ویژگی ها:

  • RabbitMQ با کلیدها و الگوهای مسیریابی کار نمی کند که تاثیر مثبتی بر بهره وری دارد. این سریعترین است exchange;
  • همه مصرف کنندگان باید بتوانند همه پیام ها را پردازش کنند.

نمایش گرافیکی جریان پیام:

RabbitMQ. بخش 2. درک مبادلات

تبادل سرصفحه

Headers exchange - پیام ها را بر اساس مقایسه جفت ویژگی (کلید، مقدار) به صف های مرتبط هدایت می کند headers پیوندها و خصوصیات پیام مشابه headers یک است Dictionary<ключ, значение>.

اگر یک کلید ویژه به فرهنگ لغت اضافه کنید x-match با معنی any، در صورت وجود تطابق جزئی از جفت (کلید، مقدار) پیام مسیریابی می شود. این رفتار مشابه اپراتور است or.

var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");

کلید پیش فرض x-match حاوی مقدار است all. این بدان معناست که اگر جفت‌های (کلید، مقدار) دقیقاً مطابقت داشته باشند، پیام مسیریابی می‌شود. این رفتار مشابه اپراتور است and.

نمایش گرافیکی جریان پیام:

RabbitMQ. بخش 2. درک مبادلات

ویژگی ها:

  • انعطاف پذیری اضافی
  • سربار محاسباتی اضافی همه جفت (کلید، مقدار) یک ویژگی headers قبل از محاسبه مقادیر مسیریابی پیام باید بر اساس نام کلید مرتب شود. کندتر از سایر انواع مبادله.

مبادله هشینگ سازگار

این مبدل است افزونه и ساخته نشده است в RabbitMQ.

Consistent-hashing exchange (تبادل با هش ثابت) - زمانی استفاده می شود که چندین صف وجود داشته باشد که گیرندگان بالقوه یک پیام هستند و زمانی که نیاز دارید بار بین آنها را متعادل کنید. ارتباط یک پیام با صف با وزن (مقدار رشته شرطی از 0 - n).

وزن معادل صف ها - نشان می دهد که هر صف دریافت خواهد کرد تقریباً به همان مقدار پیام ها (هر پیام تنها در یک صف قرار می گیرد). هیچ تضمین کاملی برای توزیع یکنواخت پیام ها وجود ندارد.

نمایش گرافیکی جریان پیام:

RabbitMQ. بخش 2. درک مبادلات

Hash بر اساس کلید یا ویژگی مسیریابی محاسبه می شود headers پیام ها. اگر همه پیام های منتشر شده دارای کلیدهای مسیریابی یا headers، سپس توزیع بر اساس وزن انجام می شود. در غیر این صورت از کلید مسیریابی یا استفاده می شود headers.

زمانی که توان مصرفی نیاز به رشد بیشتر از یک راه حل با چندین مصرف کننده با استفاده از یک صف واحد دارد، باید کمک کند.

مبدل های ترکیبی (E2E)

رفتار همه مبدل ها را می توان با استفاده از ارتباطات ترکیب کرد مبادله به مبادله (مبدل های ترکیبی در مشخصات گنجانده نشده است AMQP. این یک گسترش پروتکل از طرف است RabbitMQ).

نمایش گرافیکی جریان پیام:

RabbitMQ. بخش 2. درک مبادلات

به قیمت E2E ما می توانیم پیکربندی مقیاس پذیر مناسب را برای برآورده کردن نیازهای فعلی و در حال رشد پیدا کنیم.

تبادل ایجاد کنید

ایجاد مبدل با استفاده از سنکرون اتفاق می افتد RPC درخواست به سرور درخواست با استفاده از روش انجام می شود Exchange.Declareبا پارامترها فراخوانی می شود:

  • نام مبدل
  • نوع مبدل
  • سایر پارامترها

نمونه خلقت exchange با کمک RabbitMQ.Client:

//...
channel.ExchangeDeclare(
    exchange: "my_exchange",
    type: "direct",
    durable: "false",
    autoDelete: "false",
    arguments: null
);
//...

  • exchange - نام مبدلی که می خواهیم ایجاد کنیم. نام باید منحصر به فرد باشد
  • type - نوع مبدل
  • durable - در صورت نصب true، و سپس exchange دائمی خواهد بود. روی دیسک ذخیره می شود و می تواند از راه اندازی مجدد سرور/کارگزار جان سالم به در ببرد. اگر ارزش false، و سپس exchange موقت است و با راه اندازی مجدد سرور/کارگزار حذف خواهد شد
  • autoDelete - حذف خودکار Exchange زمانی که تمام صف های مرتبط با آن حذف شوند حذف خواهد شد
  • arguments - آرگومان های اختیاری اغلب آنها از طریق استدلال مشخص می کنند alternative exchange (مبدل جایگزین). اگر پیامی نتواند در مسیر اصلی حرکت کند، می‌تواند به یک مبدل جایگزین ارسال شود تا در مسیر دیگری هدایت شود.

RabbitMQ. بخش 2. درک مبادلات

اگر خلقت exchange شاید، سپس سرور به مشتری یک همگام ارسال می کند RPC پاسخ Exchange.DeclareOk. اگر خلقت غیرممکن است (درخواست رد شد Exchange.Declare)، سپس کانال بسته میشه سرور با استفاده از دستور ناهمزمان Channel.Close و مشتری یک استثنا دریافت خواهد کرد OperationInterruptedExceptionکه حاوی کد خطا و توضیحات آن خواهد بود.

قبل از ارسال پیام ها باید یک مبدل ایجاد شود. اگر پیامی را برای مبادله‌کننده‌ای که وجود ندارد منتشر کنید - RabbitMQ بی سر و صدا آن را حذف خواهد کرد.

ایجاد Exchange از طریق رابط کاربری گرافیکی

به پنل مدیریت بروید RabbitMQ زیر کاربر guest (نام کاربری: guest و رمز عبور: guest). لطفا توجه داشته باشید که کاربر guest فقط می تواند از لوکال هاست متصل شود. حالا به تب برویم Exchanges و بر روی کلیک کنید Add a new exchange. مشخصات را پر کنید:

RabbitMQ. بخش 2. درک مبادلات

بیشتر خواص در بالا توضیح داده شده است. در اینجا توجه می کنیم که اگر تنظیم کنیم Internal، پس از این مبادله فقط می توان برای آن استفاده کرد E2E. Producer قادر به ارسال پیام به چنین صرافی نخواهد بود.

نتیجه

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

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

اگر تعداد مسیرها به بی نهایت تمایل دارد، پس باید به آن توجه کنید topic exchange یا در صورت عدم نیاز به الگو، می توانید انتخاب کنید direct exchnge، زیرا او سریعتر است topic exchange.

ترکیبات مختلف exchange باید به شما کمک کند تا مورد مناسب را پیدا کنید پیکربندی مقیاس پذیر، که هم نیازهای سیستم فعلی و هم در حال رشد را برآورده می کند.

شماره exchange و صف ها باید در مقایسه با تعداد مسیرها حداقل باشد.

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

مراجع

منبع: www.habr.com

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