РаббитМК. Део 2. Разумевање размене

Exchange - измјењивач или замјенско мјесто. На њега се шаљу поруке. Exchange дистрибуира поруку у једном или више редова. Он усмерава поруке у ред на основу креираних веза (bindings) између њега и реда.

Exchange није Ерлангов процес. Из разлога скалабилности exchange је стринг (линк до модула са кодом где се налази логика рутирања) у уграђеној бази података мнезија. 1 размењивача ће потрошити само 1МБ меморије.

Преглед садржаја

  • РаббитМК. Део 1. Увод. Ерланг, АМКП и РПЦ
  • РаббитМК. Део 2. Разумевање размене
  • РаббитМК. Део 3. Разумевање редова и везивања
  • РаббитМК. Део 4. Бављење оним што су поруке и оквири
  • РаббитМК. Део 5: Перформансе објављивања и конзумирања порука
  • РаббитМК. Део 6. Преглед модула Федерације и Лопате
  • РаббитМК. Део 7. Детаљи о Цоннецтион и Цханел
  • РаббитМК. Део 8. РаббитМК у .НЕТ-у
  • РаббитМК. Део 9. Мониторинг

Директна размена

Direct exchange - користи се по потреби доставити поруку одређеним редовима. Порука се објављује размењивачу са одређеним кључ за рутирање и улази у све редове који су повезани са овим размењивачем са сличним кључем за рутирање. Кључ за рутирање је низ. Упаривање се врши помоћу провера једнакости низова.

Графички приказ тока поруке:

РаббитМК. Део 2. Разумевање размене

В rabbitmq постоји концепт подразумевани размењивач. Она direct exchange без имена. Ако се користи подразумевани размењивач, онда ће порука бити преусмерена у ред са именом једнаким кључ за рутирање порука.

Размена тема

Topic exchange – слично direct exchange омогућава селективно рутирање упоређивањем кључа за рутирање. Али, у овом случају, кључ је дат према шаблону. Када креирате шаблон, користите 0 или више речи (слова AZ и az и бројевима 0-9), одвојене тачком, као и симболи * и #.

  • * - може се заменити са тачно 1 реч
  • # - може се заменити са 0 или више речи

Графички приказ тока поруке:

РаббитМК. Део 2. Разумевање размене

Почевши од верзије RabbitMQ 2.4.0 алгоритам рутирања за topic exchange почео да ради до 145 пута брже. То су постигли применом приступа покушајте имплементацију, што подразумева представљање шаблона као структуре стабла. На пример шаблони a.b.c, a.*.b.c, a.#.c и b.b.c биће представљена следећом структуром:

РаббитМК. Део 2. Разумевање размене

Поклапање узорака се тражи почевши од корена и од врха до дна.

Карактеристике:

  • употреба овог измењивача може постати добар избор за могући будући развој апликација, јер шаблони се увек могу прилагодити тако да се порука објави на сличан начин direct exchange или fanout exchange
  • шаблони који користе * много брженего шаблони који користе #.
  • topic exchange спорији direct exchange

Фаноут Екцханге

Fanout exchange - све поруке се испоручују у све редове чак и ако је кључ за рутирање наведен у поруци.

Карактеристике:

  • RabbitMQ не ради са кључевима и шаблонима за рутирање што позитивно утиче на перформансе. Ово је најбрже exchange;
  • сви потрошачи морају бити у стању да обраде све поруке;

Графички приказ тока поруке:

РаббитМК. Део 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.

Графички приказ тока поруке:

РаббитМК. Део 2. Разумевање размене

Карактеристике:

  • додатна флексибилност
  • додатни рачунски трошкови. Сви парови (кључ, вредност) атрибута headers мора се сортирати по имену кључа пре израчунавања вредности рутирања порука. Спорије од других врста размене.

Конзистентна размена хеширања

Овај измењивач је повезати и није уграђено в RabbitMQ.

Consistent-hashing exchange (размена са доследним хеширањем) – користи се када постоји више редова који су потенцијални примаоци поруке и када треба да избалансирате оптерећење између њих. Порука је повезана са редом по тежини (условна вредност стринга из 0 - n).

Еквивалентна тежина редова - означава да ће сваки ред примити отприлике исти износ поруке (свака порука ће бити стављена у само један ред чекања). Не постоји потпуна гаранција уједначене дистрибуције порука.

Графички приказ тока поруке:

РаббитМК. Део 2. Разумевање размене

Hash израчунати на основу кључа или својства рутирања headers поруке. Ако су све објављене поруке имале различите кључеве за рутирање, или headers, онда ће се расподела десити по тежини. У супротном ће се користити кључ за рутирање, или headers.

Требало би да помогне када пропусност потрошача треба да расте више од решења са више потрошача који користе исти ред.

Комбинација измењивача (Е2Е)

Понашање свих измењивача може се комбиновати коришћењем комуникације Екцханге-то-Екцханге (комбинација измењивача није укључена у спецификацију AMQP. Ово је проширење протокола са стране RabbitMQ).

Графички приказ тока поруке:

РаббитМК. Део 2. Разумевање размене

На рачун 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 (алтернативни измењивач). Ако порука не може да прође кроз оригиналну руту, може се послати на алтернативну размену да би била преусмерена другом путањом.

РаббитМК. Део 2. Разумевање размене

Ако стварање exchange можда, онда ће сервер послати клијенту синхрони RPC одговор Exchange.DeclareOk. Ако стварање немогуће (било је одбијено на захтев Exchange.Declare), онда канал ће се затворити сервер помоћу асинхроне команде Channel.Close а клијент ће добити изузетак ОператионИнтерруптедЕкцептион, који ће садржати шифру грешке и њен опис.

Размјењивач мора бити креиран прије објављивања. Ако објавите поруку неком непостојећем размењивачу - RabbitMQ тихо га уклоните.

Направите Екцханге ГУИ

Идите на административни панел RabbitMQ под корисником guest (корисничко име: guest и лозинка: guest). Имајте на уму да корисник guest може да се повеже само са локалног хоста. Сада идемо на картицу Exchanges и кликните на Add a new exchange. Попуните својства:

РаббитМК. Део 2. Разумевање размене

Већина својстава је описана горе. Овде примећујемо да ако поставимо Internal, онда се размена може користити само за E2E. Producer неће моћи да шаље поруке таквој размени.

Закључак

Приликом развоја система згодно је описати топологију рутирање користећи граф. Али пре него што почнете да градите графикон, вреди истакнути стазе са великим прометом, јер. захтевају већа пропусност (перформансе). Затим можете класификовати саобраћај. А онда почните да градите.

Ако у конструисаном графу постоји коначан скуп кључеве за рутирање, дакле, вреди погледати неколико fanout exchange, који су 1:1 повезани са кључем за рутирање. Запамтите да fanout exchange најбрже.

Ако број рута тежи бесконачности, вреди обратити пажњу topic exchange или, ако шаблон није потребан, онда можете изабрати direct exchnge, јер он је бржи topic exchange.

Комбинације разних exchange требало би да вам помогне да пронађете праву. скалабилна конфигурација, који испуњава тренутне и растуће системске захтеве.

број exchange а редови треба да буду минимални у поређењу са бројем рута.

У следећем чланку ћемо почети да разумемо више о редовима и везама.

референце

Извор: ввв.хабр.цом

Додај коментар