Exchange
- تبادله کوونکي یا د تبادلې نقطه. پیغامونه ورته لیږل کیږي. Exchange
پیغام توزیع کوي په یو یا ډیرو کتارونو کې. هغه پیغامونه کتار ته رسوي د جوړ شوي لینکونو پر بنسټ (bindings
) د دې او کتار ترمنځ.
Exchange
نه دی exchange
په جوړ شوي ډیټابیس کې یو تار دی (د کوډ سره د ماډل سره اړیکه چیرې چې د روټینګ منطق موقعیت لري)
فهرست
RabbitMQ. 1 برخه. پیژندنه. Erlang، AMQP او RPC RabbitMQ. برخه 2. د تبادلې پوهه - RabbitMQ. دریمه برخه. د قطارونو او بندیزونو پوهیدل
- RabbitMQ. 4 برخه. د پیغامونو او چوکاټونو سره معامله کول
- RabbitMQ. پنځمه برخه: د پیغام خپرول او مصرف کول
- RabbitMQ. 6 برخه. د فدراسیون او شاول ماډلونو عمومي کتنه
- RabbitMQ. برخه 7. د ارتباط او چینل په اړه توضیحات
- RabbitMQ. 8 برخه. په .NET کې RabbitMQ
- RabbitMQ. 9 برخه. څارنه
مستقیم تبادله
Direct exchange
- کله چې اړتیا وي کارول کیږي ځانګړي کتارونو ته پیغام وړاندې کوي. پیغام د یو مشخص سره تبادله کونکي ته خپور شوی روټینګ کیلي او ټولو کتارونو ته ځي چې د ورته روټینګ کیلي سره د دې تبادلې سره تړاو لري. د روټینګ کیلي یو تار دی. په کارولو سره سمون ورکول کیږي د برابرۍ لپاره تارونه چک کول.
د پیغام جریان ګرافیکي استازیتوب:
В rabbitmq
یو مفهوم شتون لري ډیفالټ ایکسچینجر. دا direct exchange
نوم نلری. که چیرې ډیفالټ ایکسچینجر وکارول شي ، نو پیغام به د ورته نوم سره کتار ته واستول شي د پیغام روټینګ کیلي.
د موضوع تبادله
Topic exchange
– ورته direct exchange
د روټینګ کیلي پرتله کولو سره انتخابي روټینګ فعالوي. مګر، پدې حالت کې، کلیدي ورکول کیږي د ټیمپلیټ لخوا. کله چې ټیمپلیټ جوړ کړئ، وکاروئ 0
یا ډیر کلمې (حروف AZ
и az
او شمیرې 0-9
)، د نقطو په واسطه جلا شوی، او همدارنګه سمبولونه *
и #
.
*
- دقیقا سره بدل کیدی شي1
لفظ#
- په واسطه بدل کیدی شي0
یا ډیر کلمې
د پیغام جریان ګرافیکي استازیتوب:
له نسخې څخه پیل کول RabbitMQ 2.4.0
د روټینګ الګوریتم لپاره topic exchange
پورې کار پیل کړ 145
څو ځله چټک. دوی دا د تګلارې په پلي کولو سره ترلاسه کړل a.b.c
, a.*.b.c
, a.#.c
и b.b.c
د لاندې جوړښت لخوا استازیتوب کیږي:
د نمونې میچ کول د ریښې څخه پیل او له پورته څخه ښکته ته تلل پلټل کیږي.
ځانګړتیاوې:
- د دې تبادلې کارول کیدی شي د غوښتنلیک احتمالي راتلونکي پرمختګ لپاره ښه انتخابځکه ټیمپلیټونه تل تنظیم کیدی شي ترڅو پیغام په ورته ډول خپور شي
direct exchange
او یاfanout exchange
- ټیمپلیټونه چې کاروي
*
ډیر ګړندید ټیمپلیټونو په پرتله چې کاروي#
. topic exchange
قرارهdirect exchange
Fanout تبادله
Fanout exchange
- ټول پیغامونه ټولو کتارونو ته استول کیږي حتی که په پیغام کې د روټینګ کیلي مشخص شوې وي.
ځانګړتیاوې:
RabbitMQ
د روټینګ کیلي او ټیمپلیټونو سره کار نه کوي کوم چې په فعالیت باندې مثبت اغیزه لري. دا تر ټولو چټک دیexchange
;- ټول مصرف کونکي باید د دې وړتیا ولري چې ټول پیغامونه پروسس کړي؛
د پیغام جریان ګرافیکي استازیتوب:
د سرونو تبادله
Headers exchange
- د (کیلي، ارزښت) ملکیتونو د جوړې پرتله کولو پراساس اړوندو کتارونو ته پیغامونه لارښود کوي headers
پابند او ورته پیغام ملکیت. headers
دی Dictionary<ключ, значение>
.
که تاسو لغت ته یو ځانګړی کلیمه اضافه کړئ x-match
د معنی سره any
، بیا پیغام لیږدول کیږي که جوړه جوړه (کیلي، ارزښت) په جزوي ډول سره سمون ولري. دا چلند د آپریټر سره ورته دی or
.
var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");
ډیفالټ کیلي x-match
ارزښت لري all
. دا پدې مانا ده چې پیغام لیږدول کیږي کله چې جوړه (کیلي، ارزښت) په بشپړه توګه سره سمون لري. دا چلند د آپریټر سره ورته دی and
.
د پیغام جریان ګرافیکي استازیتوب:
ځانګړتیاوې:
- اضافي انعطاف
- اضافي کمپیوټري سر. د صفت ټولې جوړې (کیلي، ارزښت).
headers
د پیغام د روټینګ ارزښتونو محاسبه کولو دمخه باید د کلیدي نوم سره ترتیب شي. د تبادلې د نورو ډولونو په پرتله ورو.
د دوامداره Hashing تبادله
دا ایکسچینجر دی RabbitMQ
.
Consistent-hashing exchange
(hash-consistent exchange) - کله چې ډیری کتارونه شتون ولري چې د پیغام احتمالي ترلاسه کونکي وي او کله چې تاسو اړتیا لرئ د دوی ترمینځ توازن پورته کړئ. پیغام د وزن په واسطه د قطار سره تړلی دی (د مشروط تار ارزښت 0 - n
).
د قطارونو مساوي وزن - دا په ګوته کوي چې هر قطار به ترلاسه کړي د ورته مقدار په اړه پیغامونه (هر پیغام به یوازې په یوه کتار کې واچول شي). د پیغامونو د یونیفورم ویش بشپړ تضمین شتون نلري.
د پیغام جریان ګرافیکي استازیتوب:
Hash
د روټینګ کیلي یا ملکیت پراساس محاسبه کیږي headers
پیغامونه که ټول خپاره شوي پیغامونه مختلف روټینګ کیلي ولري، یا headers
نو بیا ویش به د وزن له مخې واقع شي. که نه نو، د روټینګ کیلي به وکارول شي، یا headers
.
باید مرسته وکړي کله چې د مصرف کونکي ټرپوټ د ورته قطار په کارولو سره د ډیری مصرف کونکو سره د حل څخه لوړ ته اړتیا ولري.
د تبادلې ترکیب (E2E)
د ټولو تبادلو چلند د مخابراتو په کارولو سره یوځای کیدی شي تبادله - تبادله (د ایکسچینجرونو ترکیب په توضیحاتو کې شامل ندي AMQP
. دا د اړخ څخه د پروتوکول توسیع دی RabbitMQ
).
د پیغام جریان ګرافیکي استازیتوب:
په لګښت E2E
موږ کولی شو د توزیع وړ مناسب ترتیب ومومئ چې دواړه اوسني او وده کونکي اړتیاوې پوره کوي.
تبادله جوړه کړئ
ایکسچینجر د ترکیب په کارولو سره رامینځته شوی RPC
سرور ته غوښتنه. غوښتنه د میتود په کارولو سره ترسره کیږي Exchange.Declare
د پیرامیټونو سره ویل کیږي:
- د تبادلې نوم
- د تبادلې ډول
- نور انتخابونه
د جوړولو مثال exchange
د مرستې سره
//...
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
(بدیل تبادله کونکی). که یو پیغام نشي کولی د اصلي لارې څخه تیر شي، دا یو بدیل تبادلې ته لیږل کیدی شي چې د بلې لارې په اوږدو کې لیږدول کیږي.
که تخلیق exchange
ممکنه ده، بیا سرور به پیرودونکي ته یو همغږي واستوي RPC
ځواب Exchange.DeclareOk
. که تخلیق ناممکن دی (په غوښتنه کې انکار شتون درلود Exchange.Declare
) ، بیا چینل به بند شي سرور د غیر متناسب کمانډ په کارولو سره Channel.Close
او پیرودونکي به یو استثنا ترلاسه کړي
یو ایکسچینجر باید د پوسټ کولو دمخه رامینځته شي. که تاسو ځینې غیر موجود ایکسچینجر ته پیغام خپور کړئ - RabbitMQ
په خاموشۍ سره یې لرې کړئ.
د تبادلې GUI جوړ کړئ
د اډمین پینل ته لاړ شئ RabbitMQ
د کارونکي لاندې guest
(کارن نوم: guest
او پټنوم: guest
). مهرباني وکړئ په یاد ولرئ چې کارن guest
یوازې د لوکل هوسټ څخه وصل کیدی شي. اوس راځئ چې ټب ته لاړ شو Exchanges
او کلیک وکړئ Add a new exchange
. ملکیتونه ډک کړئ:
ډیری ملکیتونه پورته بیان شوي. دلته موږ یادونه کوو چې که موږ ترتیب کړو Internal
، بیا تبادله یوازې د دې لپاره کارول کیدی شي E2E
. Producer
داسې تبادلې ته به پیغامونه ونه لیږل شي.
پایلې
کله چې یو سیسټم رامینځته کړئ ، نو دا د توپولوژي تشریح کول اسانه دي
که په جوړ شوي ګراف کې شتون ولري محدوده جوړه روټینګ کیلي، بیا، دا د څو په لور د کتلو ارزښت لري fanout exchange
، کوم چې 1: 1 د روټینګ کیلي سره تړاو لري. دغه په یاد ولره fanout exchange
تر ټولو چټک
که د لارو شمیر لامحدودیت ته لیوالتیا لري، دا د پام وړ ارزښت لري topic exchange
یا، که ټیمپلیټ ته اړتیا نه وي، نو تاسو کولی شئ غوره کړئ direct exchnge
ځکه هغه چټک دی topic exchange
.
د مختلفو ترکیبونو exchange
باید تاسو سره د سم موندلو کې مرسته وکړي. د توزیع وړ ترتیب، کوم چې دواړه اوسني او وده کونکي سیسټم اړتیاوې پوره کوي.
د exchange
او کتارونه باید د لارو د شمیر په پرتله لږ وي.
په راتلونکې مقاله کې، موږ به د قطارونو او بندیزونو په اړه نور پوهیدل پیل کړو.
مرجع
سرچینه: www.habr.com