RabbitMQ. حصو 2. سمجھڻ واري ايڪسچينج

Exchange - مٽائيندڙ يا مٽائيندڙ پوائنٽ. ان تي نياپا موڪليا ويندا آهن. Exchange پيغام ورهائي ٿو هڪ يا وڌيڪ قطار ۾. هن رستا پيغامن کي قطار ڏانهن ٺاهيل لنڪ جي بنياد تي (bindings) ان ۽ قطار جي وچ ۾.

Exchange نه آهي آرلنگ عمل. اسڪاليبلٽي جي سببن لاء exchange بلٽ ان ڊيٽابيس ۾ هڪ اسٽرنگ آهي (ڪوڊ سان ماڊل سان ڳنڍيل جتي روٽنگ منطق واقع آهي) دماغي مرض. 1 هزار ايڪسچينجرز صرف 1MB ميموري استعمال ڪندا.

مضمونن جو جدول

سڌو مٽاسٽا

Direct exchange - جڏهن ضرورت هجي استعمال ڪيو وڃي مخصوص قطارن تائين پيغام پهچائڻ. پيغام هڪ مخصوص سان exchanger ڏانهن شايع ڪيو ويو آهي رستي جي چاٻي ۽ سڀني قطارن ۾ داخل ٿئي ٿو جيڪي ھن ايڪسچينج سان لاڳاپيل آھن ھڪڙي ھڪڙي رستي واري چاٻي سان. روٽنگ ڪيئي هڪ تار آهي. ميلاپ استعمال ڪندي ڪيو ويندو آهي برابري لاءِ تارن جي چڪاس.

پيغام جي وهڪري جي گرافڪ نمائندگي:

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. سمجھڻ واري ايڪسچينج

نمونن جي ميلاپ کي ڳولھيو ويندو آھي روٽ کان شروع ڪندي ۽ مٿي کان ھيٺ تائين.

Features:

  • هن exchanger جو استعمال ٿي سگهي ٿو ممڪن مستقبل جي ايپ ڊولپمينٽ لاءِ سٺو انتخاب، ڇاڪاڻ ته ٽيمپليٽ هميشه ترتيب ڏئي سگھجن ٿيون ته جيئن پيغام ساڳئي طرح شايع ٿئي direct exchange يا fanout exchange
  • ٽيمپليٽ جيڪي استعمال ڪن ٿا * تمام تيزاستعمال ٿيندڙ ٽيمپليٽن جي ڀيٽ ۾ #.
  • topic exchange وerيڪ سست direct exchange

Fanout مٽاسٽا

Fanout exchange - سڀئي پيغام سڀني قطارن تائين پهچائي رهيا آهن جيتوڻيڪ پيغام ۾ هڪ روٽنگ چيڪ بيان ڪيو ويو آهي.

Features:

  • 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. سمجھڻ واري ايڪسچينج

Features:

  • اضافي لچڪدار
  • اضافي ڪمپيوٽيشنل اوور هيڊ. صفت جا سڀ جوڙا (ڪجھ، قدر). headers پيغام جي رستي جي قدرن کي ڳڻڻ کان اڳ اهم نالي سان ترتيب ڏيڻ لازمي آهي. تبادلي جي ٻين قسمن جي ڀيٽ ۾ سست.

مسلسل Hashing مٽاسٽا

هي ايڪسچينج آهي پلگ ان и تعمير ٿيل نه آهي в RabbitMQ.

Consistent-hashing exchange (مسلسل هيشنگ سان مٽائڻ) - استعمال ڪيو ويندو آهي جڏهن ڪيتريون ئي قطارون هونديون آهن جيڪي هڪ پيغام جا امڪاني وصول ڪندڙ آهن ۽ جڏهن توهان کي انهن جي وچ ۾ لوڊ توازن ڪرڻ جي ضرورت آهي. پيغام قطار سان وزن جي لحاظ سان ڳنڍيل آهي (هڪ مشروط اسٽرنگ قدر 0 - n).

قطار جي برابر وزن - اشارو ڪري ٿو ته هر قطار وصول ڪندي ساڳئي رقم جي باري ۾ پيغام (هر پيغام کي صرف هڪ قطار ۾ رکيو ويندو). پيغامن جي يونيفارم ورڇ جي ڪا به مڪمل ضمانت نه آهي.

پيغام جي وهڪري جي گرافڪ نمائندگي:

RabbitMQ. حصو 2. سمجھڻ واري ايڪسچينج

Hash ڪمپيوٽنگ جي بنياد تي روٽنگ ڪي يا ملڪيت headers پيغام. جيڪڏهن سڀني شايع ٿيل پيغامن ۾ مختلف روٽنگ ڪيچ هئا، يا headers، پوءِ تقسيم وزن سان ٿيندي. ٻي صورت ۾، روٽنگ چيڪ استعمال ڪيو ويندو، يا headers.

مدد ڪرڻ گهرجي جڏهن صارفين جي ذريعي هڪ ئي قطار استعمال ڪندي ڪيترن ئي صارفين سان حل کان وڌيڪ وڌڻ جي ضرورت آهي.

ايڪسچينجرز جو ميلاپ (E2E)

سڀني مٽاسٽا ڪندڙن جي رويي کي ڪميونيڪيشن ذريعي گڏ ڪري سگھجي ٿو مٽا سٽا جي بدلي (Exchangers جو ميلاپ وضاحت ۾ شامل نه آهي AMQP. هي پاسي کان هڪ پروٽوڪول واڌارو آهي RabbitMQ).

پيغام جي وهڪري جي گرافڪ نمائندگي:

RabbitMQ. حصو 2. سمجھڻ واري ايڪسچينج

جي خرچ تي E2E اسان ڳولي سگهون ٿا صحيح اسپيبلبل ترتيب جيڪا موجوده ۽ وڌندڙ ضرورتن کي پورو ڪري ٿي.

ايڪسچينج ٺاهيو

ايڪسچينج هڪ هم وقت ساز استعمال ڪندي ٺاهي وئي آهي RPC سرور ڏانهن درخواست. درخواست جو طريقو استعمال ڪندي ڪيو ويو آهي Exchange.Declareparameters سان سڏيو:

  • مٽائيندڙ جو نالو
  • ايڪسچينج جو قسم
  • ٻيا اختيار

تخليق جو مثال 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) پوء چينل بند ٿي ويندو سرور هڪ asynchronous حڪم استعمال ڪندي Channel.Close ۽ ڪلائنٽ هڪ استثنا حاصل ڪندو Operation InterruptedException، جنهن ۾ غلطي ڪوڊ ۽ ان جي وضاحت شامل هوندي.

پوسٽ ڪرڻ کان اڳ ھڪڙو مٽائيندڙ ٺاھيو وڃي. جيڪڏهن توهان ڪجهه غير موجود ايڪسچينج ڪندڙ ڏانهن پيغام شايع ڪيو - RabbitMQ خاموشيء سان ان کي هٽايو.

ايڪسچينج GUI ٺاهيو

ايڊمن پينل ڏانھن وڃو RabbitMQ استعمال ڪندڙ جي تحت guest استعمال ڪندڙ guest ۽ پاسورڊ: guest). مهرباني ڪري نوٽ ڪريو ته استعمال ڪندڙ guest صرف localhost کان ڳنڍجي سگھي ٿو. هاڻي اچو ته ٽيب ڏانهن وڃو Exchanges ۽ ڪلڪ ڪريو Add a new exchange. خاصيتون ڀريو:

RabbitMQ. حصو 2. سمجھڻ واري ايڪسچينج

گهڻيون ملڪيتون مٿي بيان ڪيون ويون آهن. هتي اسان نوٽ ڪيو ته جيڪڏهن اسان سيٽ ڪيو Internal، پوءِ بدلي صرف لاءِ استعمال ٿي سگھي ٿو E2E. Producer اهڙي مٽاسٽا تي پيغام موڪلڻ جي قابل نه هوندا.

ٿڪل

جڏهن هڪ سسٽم کي ترقي ڪندي، اهو آسان آهي ته ٽوپولوجي بيان ڪرڻ لاء رستو ڏيڻ گراف استعمال ڪندي. پر ان کان اڳ توهان هڪ گراف تعمير ڪرڻ شروع ڪيو، اهو اعلي ٽرئفڪ سان رستن کي نمايان ڪرڻ جي قابل آهي، ڇاڪاڻ ته. انهن جي ضرورت آهي اعلي throughput (ڪارڪردگي). اڳيون، توهان ٽرئفڪ جي درجه بندي ڪري سگهو ٿا. ۽ پوء تعمير ڪرڻ شروع ڪريو.

جيڪڏهن ٺهيل گراف ۾ موجود آهي محدود سيٽ روٽنگ ڪنجيون، پوء، اهو ڪيترن ئي طرف ڏسڻ جي قابل آهي fanout exchange، جيڪي 1:1 روٽنگ ڪنجي سان لاڳاپيل آهن. اهو ياد رکو fanout exchange تيز ترين.

جيڪڏهن رستن جو تعداد لامحدوديت ڏانهن وڌي ٿو، اهو ڌيان ڏيڻ جي قابل آهي topic exchange يا، جيڪڏهن ٽيمپليٽ جي ضرورت نه آهي، ته پوء توهان چونڊي سگهو ٿا direct exchnge، ڇاڪاڻ ته هو تيز آهي topic exchange.

مختلف قسمن جا مجموعا exchange توهان کي صحيح ڳولڻ ۾ مدد ڪرڻ گهرجي. اسپيبلبل ٺاھ جوڙ، جيڪو ٻنهي موجوده ۽ وڌندڙ سسٽم گهرجن کي پورو ڪري ٿو.

جو تعداد exchange ۽ قطارن کي رستن جي تعداد جي مقابلي ۾ گھٽ ۾ گھٽ هجڻ گھرجي.

ايندڙ آرٽيڪل ۾، اسان قطار ۽ پابندن بابت وڌيڪ سمجهڻ شروع ڪنداسين.

حوالن

جو ذريعو: www.habr.com

تبصرو شامل ڪريو