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 байланыстыру және ұқсас хабар сипаты. 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 графикалық интерфейсін жасаңыз

Әкімші панеліне өтіңіз 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 және кезек саны маршруттар санымен салыстырғанда аз болуы керек.

Келесі мақалада біз Кезектер мен байланыстырулар туралы көбірек түсіне бастаймыз.

сілтемелер

Ақпарат көзі: www.habr.com

пікір қалдыру