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-бөлүк. Connection жана Chanel жөнүндө маалымат
  • 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 Exchange

Fanout exchange - бардык билдирүүлөр бардык кезектерге жеткирилет кабарда маршруттук ачкыч көрсөтүлгөн болсо да.

өзгөчөлүктөрү:

  • RabbitMQ маршруттук ачкычтар жана шаблондор менен иштебейт аткарууга жакшы таасирин тийгизет. Бул эң тез exchange;
  • бардык керектөөчүлөр бардык билдирүүлөрдү иштеп чыгууга жөндөмдүү болушу керек;

Кабардын агымынын графикалык көрүнүшү:

RabbitMQ. 2-бөлүк. Алмашууларды түшүнүү

Headers 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.

Кабардын агымынын графикалык көрүнүшү:

RabbitMQ. 2-бөлүк. Алмашууларды түшүнүү

өзгөчөлүктөрү:

  • кошумча ийкемдүүлүк
  • кошумча эсептөө чыгымдары. Атрибуттун бардык жуптары (ачкыч, маани). headers билдирүү багыттоо маанилерин эсептөө алдында ачкыч аты боюнча сорттолушу керек. алмашуунун башка түрлөрүнө караганда жайыраак.

Ырааттуу хэш алмашуу

Бул алмаштыргыч болуп саналат плагин и салынган эмес в RabbitMQ.

Consistent-hashing exchange (ырааттуу хэширлөө менен алмашуу) - билдирүүнүн потенциалдуу алуучулары болгон бир нече кезектер болгондо жана алардын ортосундагы жүктү тең салмактоо керек болгондо колдонулат. Кабар салмагы боюнча кезек менен байланышкан (шарттуу сап мааниси 0 - n).

Кезектердин эквиваленттүү салмагы - ар бир кезек кабыл аларын көрсөтөт болжол менен ошол эле сумма билдирүүлөр (ар бир билдирүү бир гана кезекке коюлат). Билдирүүлөрдү бирдей бөлүштүрүүгө толук кепилдик жок.

Кабардын агымынын графикалык көрүнүшү:

RabbitMQ. 2-бөлүк. Алмашууларды түшүнүү

Hash маршруттук ачкычтын же касиеттин негизинде эсептелген headers билдирүүлөр. Эгерде бардык жарыяланган билдирүүлөр башка маршруттук ачкычтарга ээ болсо, же headers, анда бөлүштүрүү салмагы боюнча ишке ашат. Болбосо, маршруттук ачкыч колдонулат, же headers.

Керектөөчүлөрдүн өткөрүү жөндөмдүүлүгү бир кезекти колдонгон бир нече керектөөчүлөр менен чечимге караганда жогорураак өсүш керек болгондо жардам бериши керек.

Алмаштыргычтардын айкалышы (E2E)

Бардык алмаштыргычтардын жүрүм-туруму байланыш аркылуу айкалыштырылышы мүмкүн Exchange-to-Exchange (алмаштыргычтардын комбинациясы спецификацияга кирбейт 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 унчукпай алып сал.

Exchange GUI түзүү

Админ панелине өтүңүз RabbitMQ колдонуучу астында guest (колдонуучунун аты: guest жана сырсөз: guest). Колдонуучу экенин эске алыңыз guest жергиликтүү хосттон гана туташа алат. Эми өтмөккө баралы Exchanges жана басыңыз Add a new exchange. касиеттерин толтуруңуз:

RabbitMQ. 2-бөлүк. Алмашууларды түшүнүү

Көпчүлүк касиеттери жогоруда сүрөттөлгөн. Бул жерде биз белгилей турган болсок Internal, анда алмашуу үчүн гана колдонулушу мүмкүн E2E. Producer мындай алмашууга билдирүүлөрдү жөнөтө албайт.

жыйынтыктоо

Системаны иштеп чыгууда топологияны сүрөттөө ыңгайлуу маршруттоо графикти колдонуу. Бирок графикти түзө баштоодон мурун, трафик көп болгон жолдорду бөлүп көрсөтүү керек, анткени. алар талап кылат жогорку өткөрүү жөндөмдүүлүгү (аткаруу). Андан кийин, сиз трафикти классификациялай аласыз. Анан курууну баштаңыз.

Эгерде курулган графикте бар болсо чектүү топтом Маршруттук ачкычтар, анда ал бир нече көздөй издөө керек fanout exchange, алар 1:1 багыттоо ачкычына байланыштуу. Ошону эсте fanout exchange эң ылдам.

Эгерде маршруттардын саны чексиздикке умтулат, ага көңүл буруу керек topic exchange же, шаблон кереги жок болсо, анда сиз тандай аласыз direct exchnge, анткени ал тезирээк topic exchange.

Ар кандай комбинациялар exchange туура табууга жардам бериши керек. масштабдуу конфигурация, бул учурдагы жана өсүп жаткан система талаптарына жооп берет.

сан exchange жана кезектер маршруттардын санына салыштырмалуу минималдуу болушу керек.

Кийинки макалада биз кезектер жана байланыштар жөнүндө көбүрөөк түшүнө баштайбыз.

шилтемелер

Source: www.habr.com

Комментарий кошуу