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. Тафсилот дар бораи Пайвастшавӣ ва Chanel
  • RabbitMQ. Қисми 8. RabbitMQ дар .NET
  • RabbitMQ. Қисми 9. Мониторинг

Мубодилаи мустақим

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. Фаҳмидани мубодила

Ҷустуҷӯи мувофиқ кардани намуна аз реша сар карда, аз боло ба поён анҷом дода мешавад.

Хусусиятҳои:

  • истифодаи ин exchanger метавонад гардад интихоби хуб барои рушди эҳтимолии ояндаи барнома, зеро Шаблонҳоро ҳамеша танзим кардан мумкин аст, то паём ба ҳамон тарз нашр шавад 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 (мубодила бо hasshing пайваста) - ҳангоми мавҷуд будани якчанд навбат, ки гирандаи эҳтимолии паём мебошанд ва вақте ки шумо бояд сарбориро байни онҳо мувозинат кунед, истифода мешавад. Пайвастагии паём бо навбат аз рӯи вазн (қимати сатри шартӣ аз 0 - n).

Вазни баробарии навбатҳо - нишон медиҳад, ки ҳар як навбат қабул хоҳад шуд такрибан хамин микдор паёмҳо (ҳар як паём танҳо дар як навбат ҷойгир карда мешавад). Кафолати пурраи паҳнкунии якхелаи паёмҳо вуҷуд надорад.

Намоиши графикии ҷараёни паём:

RabbitMQ. Қисми 2. Фаҳмидани мубодила

Hash дар асоси калиди масир ё моликият ҳисоб карда мешавад headers паёмҳо. Агар ҳамаи паёмҳои нашршуда калидҳои масирҳои гуногун дошта бошанд ё headers, он гоҳ тақсимот аз рӯи вазн ба амал меояд. Дар акси ҳол, калиди масир истифода мешавад ё headers.

Он бояд вақте кӯмак кунад, ки интиқоли истеъмолкунандагон бояд нисбат ба ҳалли бо истеъмолкунандагони сершумор бо истифода аз як навбат баландтар шавад.

Якҷоя кардани ивазкунандаҳо (E2E)

Рафтори ҳама мубодилакунандагонро бо истифода аз алоқа муттаҳид кардан мумкин аст Мубодила ба Биржа (комбинатсияи ивазкунандаҳо ба мушаххасот дохил карда нашудаанд AMQP. Ин як тамдиди протокол аз ҷониби аст RabbitMQ).

Намоиши графикии ҷараёни паём:

RabbitMQ. Қисми 2. Фаҳмидани мубодила

Аз ҳисоби E2E мо метавонем конфигуратсияи дурусти миқёспазирро пайдо кунем, ки ҳам ба талаботи ҷорӣ ва ҳам афзоянда ҷавобгӯ бошад.

Эҷоди Exchange

Эҷоди мубодила бо истифода аз синхронӣ сурат мегирад 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 оромона бартараф мекунад.

Эҷоди мубодила тавассути GUI

Ба панели администратор равед RabbitMQ зери истифодабаранда guest (номи корбар: guest ва парол: guest). Лутфан қайд кунед, ки истифодабаранда guest метавонад танҳо аз localhost пайваст шавад. Акнун биёед ба ҷадвал равем Exchanges ва пахш кунед Add a new exchange. Хусусиятҳоро пур кунед:

RabbitMQ. Қисми 2. Фаҳмидани мубодила

Аксарияти хосиятҳо дар боло тавсиф шудаанд. Дар ин ҷо мо қайд мекунем, ки агар мо муқаррар кунем Internal, он гоҳ мубодила метавонад танҳо барои истифода бурда мешавад E2E. Producer ба ин гуна мубодила хабар фиристода наметавонад.

хулоса

Ҳангоми таҳияи система тавсифи топология қулай аст масир бо истифода аз график. Аммо пеш аз он ки шумо ба сохтани график шурӯъ кунед, бояд роҳҳои дорои трафики зиёдро қайд кунед, зеро худи онхо талаб мекунанд гузариши баландтар (спектакли). Минбаъд шумо метавонед трафикро тасниф кунед. Ва танҳо пас аз он ба сохтмон шурӯъ кунед.

Агар дар графики сохташуда мавчуд бошад маҷмӯи ниҳоӣ калидҳои масир, пас ба чанде назар кардан меарзад fanout exchange, ки 1:1 бо калиди масир алоқаманданд. Мо инро дар хотир дорем fanout exchange зудтарин.

Агар шумораи маршрутхо ба беохир майл дорад, диккат додан бамаврид аст topic exchange ё, агар қолаб лозим набошад, шумо метавонед интихоб кунед direct exchnge, зеро вай тезтар аст topic exchange.

Комбинатсияҳои гуногун exchange бояд ба шумо дар пайдо кардани чизи дуруст ёрй расонад конфигуратсияи миқёспазир, ки ҳам ба талаботи ҷорӣ ва ҳам ба талаботи рӯзафзуни система мувофиқат мекунад.

Шумораи exchange ва навбат бояд нисбат ба шумораи хатсайрҳо камтар бошад.

Дар мақолаи навбатӣ мо ба муфассалтар фаҳмидани Навбатҳо ва Пайвасткуниҳо шурӯъ хоҳем кард.

мурожиат

Манбаъ: will.com

Илова Эзоҳ