RabbitMQ. برخه 2. د تبادلې پوهه

Exchange - تبادله کوونکي یا د تبادلې نقطه. پیغامونه ورته لیږل کیږي. Exchange پیغام توزیع کوي په یو یا ډیرو کتارونو کې. هغه پیغامونه کتار ته رسوي د جوړ شوي لینکونو پر بنسټ (bindings) د دې او کتار ترمنځ.

Exchange نه دی د ایرلګ پروسه. د توزیع کولو دلیلونو لپاره exchange په جوړ شوي ډیټابیس کې یو تار دی (د کوډ سره د ماډل سره اړیکه چیرې چې د روټینګ منطق موقعیت لري) دماغي ناروغي. 1 زره تبادله کونکي به یوازې 1MB حافظه مصرف کړي.

فهرست

  • RabbitMQ. 1 برخه. پیژندنه. Erlang، AMQP او RPC
  • RabbitMQ. برخه 2. د تبادلې پوهه
  • RabbitMQ. دریمه برخه. د قطارونو او بندیزونو پوهیدل
  • RabbitMQ. 4 برخه. د پیغامونو او چوکاټونو سره معامله کول
  • RabbitMQ. پنځمه برخه: د پیغام خپرول او مصرف کول
  • RabbitMQ. 6 برخه. د فدراسیون او شاول ماډلونو عمومي کتنه
  • RabbitMQ. برخه 7. د ارتباط او چینل په اړه توضیحات
  • RabbitMQ. 8 برخه. په .NET کې 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 د پیغام د روټینګ ارزښتونو محاسبه کولو دمخه باید د کلیدي نوم سره ترتیب شي. د تبادلې د نورو ډولونو په پرتله ورو.

د دوامداره Hashing تبادله

دا ایکسچینجر دی نښلول и نه جوړ شوی в RabbitMQ.

Consistent-hashing exchange (hash-consistent 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 او پیرودونکي به یو استثنا ترلاسه کړي Operation Interrupted Exception، کوم چې به د خطا کوډ او توضیحات ولري.

یو ایکسچینجر باید د پوسټ کولو دمخه رامینځته شي. که تاسو ځینې غیر موجود ایکسچینجر ته پیغام خپور کړئ - RabbitMQ په خاموشۍ سره یې لرې کړئ.

د تبادلې GUI جوړ کړئ

د اډمین پینل ته لاړ شئ RabbitMQ د کارونکي لاندې guest (کارن نوم: guest او پټنوم: guest). مهرباني وکړئ په یاد ولرئ چې کارن guest یوازې د لوکل هوسټ څخه وصل کیدی شي. اوس راځئ چې ټب ته لاړ شو 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

Add a comment