Exchange - փոխանակիչ կամ փոխանակման կետ: Հաղորդագրություններ են ուղարկվում դրան: Exchangeտարածում է հաղորդագրությունը մեկ կամ մի քանի հերթերում. Նա ուղարկում է հաղորդագրությունները դեպի հերթ ստեղծված հղումների հիման վրա (bindings) դրա և հերթի միջև:
Exchange չէ Erlang գործընթացը. Մասշտաբայնության պատճառներով exchange ներկառուցված տվյալների բազայում տող է (մոդուլի հղում կոդով, որտեղ գտնվում է երթուղային տրամաբանությունը) մնեզիա. 1 հազար փոխանակիչները կսպառեն ընդամենը 1 ՄԲ հիշողություն։
RabbitMQ. Մաս 4. Զբաղվել հաղորդագրությունների և շրջանակների հետ
RabbitMQ. Մաս 5. Հաղորդագրությունների հրապարակում և սպառում
RabbitMQ. Մաս 6. Ֆեդերացիայի և թիակի մոդուլների ակնարկ
RabbitMQ. Մաս 7. Մանրամասներ Connection-ի և Chanel-ի մասին
RabbitMQ. Մաս 8. RabbitMQ .NET-ում
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 Հաղորդագրությունների երթուղային արժեքները հաշվարկելուց առաջ պետք է տեսակավորվի ըստ բանալի անվան: Ավելի դանդաղ, քան փոխանակման այլ տեսակներ.
Հետևողական Հեշինգ փոխանակում
Այս փոխանակիչը միացնել и ներկառուցված չէ в RabbitMQ.
Consistent-hashing exchange (հեշ-համապատասխան փոխանակում) - օգտագործվում է, երբ կան բազմաթիվ հերթեր, որոնք հաղորդագրության պոտենցիալ ստացողներ են, և երբ անհրաժեշտ է բեռնել հավասարակշռությունը դրանց միջև: Հաղորդագրությունը կապված է հերթի հետ ըստ քաշի (պայմանական տողային արժեք՝ սկսած 0 - n).
Հերթերի համարժեք կշիռ - ցույց է տալիս, որ յուրաքանչյուր հերթ կստանա մոտավորապես նույնքան հաղորդագրություններ (յուրաքանչյուր հաղորդագրություն կտեղադրվի միայն մեկ հերթում): Հաղորդագրությունների միասնական բաշխման ամբողջական երաշխիք չկա.
Հաղորդագրության հոսքի գրաֆիկական ներկայացում.
Hash հաշվարկված՝ հիմնվելով երթուղային բանալի կամ հատկության վրա headers հաղորդագրություններ. Եթե բոլոր հրապարակված հաղորդագրությունները ունեն տարբեր երթուղային ստեղներ, կամ headers, ապա բաշխումը տեղի կունենա ըստ քաշի: Հակառակ դեպքում կօգտագործվի երթուղային ստեղնը, կամ headers.
Պետք է օգնի, երբ սպառողների թողունակությունը պետք է ավելի բարձր լինի, քան միևնույն հերթում օգտագործող բազմաթիվ սպառողների լուծումը:
Փոխանակիչների համակցություն (E2E)
Բոլոր փոխանակողների վարքագիծը կարող է համակցվել հաղորդակցության միջոցով Փոխանակման փոխանակում (փոխանակիչների համակցությունը ներառված չէ մասնագրման մեջ AMQP. Սա արձանագրության ընդլայնում է կողքից RabbitMQ).
Հաղորդագրության հոսքի գրաֆիկական ներկայացում.
-Ի հաշվին E2E մենք կարող ենք գտնել ճիշտ մասշտաբային կոնֆիգուրացիա, որը համապատասխանում է ինչպես ընթացիկ, այնպես էլ աճող պահանջներին:
Ստեղծեք փոխանակում
Փոխանակիչը ստեղծվում է սինխրոնի միջոցով RPC հարցում սերվերին: Հարցումը կատարվում է մեթոդով Exchange.Declare, որը կոչվում է պարամետրերով.
exchange - փոխանակիչի անունը, որը մենք ցանկանում ենք ստեղծել: Անունը պետք է լինի եզակի
type - փոխարկիչի տեսակը
durable - եթե տեղադրված է true, Հետո exchange կլինի մշտական. Այն կպահվի սկավառակի վրա և կկարողանա գոյատևել սերվերի/բրոքերի վերագործարկումից հետո: Եթե արժեքը false, Հետո exchange ժամանակավոր է և կհեռացվի, երբ սերվերը/բրոքերը վերագործարկվի
autoDelete - ավտոմատ ջնջում: Exchange կջնջվի, երբ բոլոր հարակից հերթերը ջնջվեն
arguments կամընտիր փաստարկներ են: Ամենից հաճախ՝ սահմանված փաստարկների միջոցով alternative exchange (այլընտրանքային փոխանակիչ) Եթե հաղորդագրությունը չի կարող անցնել սկզբնական երթուղու միջով, այն կարող է ուղարկվել այլընտրանքային փոխանակում, որպեսզի այն ուղղորդվի այլ ճանապարհով:
Եթե ստեղծումը exchangeգուցե, ապա սերվերը հաճախորդին կուղարկի համաժամանակյա RPC պատասխան Exchange.DeclareOk. Եթե ստեղծումը անհնար է (խնդրանքը մերժվել է Exchange.Declare), դա ալիքը կփակվի սերվեր՝ օգտագործելով ասինխրոն հրաման Channel.Close և հաճախորդը բացառություն կստանա OperationInterruptedException, որը կպարունակի սխալի կոդը և դրա նկարագրությունը:
Փակցնելուց առաջ պետք է ստեղծվի փոխանակիչ: Եթե դուք հաղորդագրություն եք հրապարակում գոյություն չունեցող փոխանակողի համար, RabbitMQ լուռ հեռացրեք այն:
Ստեղծեք Exchange GUI
Գնացեք ադմինիստրատորի վահանակ RabbitMQ օգտագործողի տակ guest (օգտագործողի անունը: guest և գաղտնաբառը: guest) Խնդրում ենք նկատի ունենալ, որ օգտագործողը guest կարող է միանալ միայն localhost-ից: Հիմա եկեք անցնենք ներդիրին Exchanges և սեղմեք Add a new exchange. Լրացրեք հատկությունները.
Հատկությունների մեծ մասը վերը նկարագրված է: Այստեղ մենք նշում ենք, որ եթե մենք սահմանենք Internal, ապա փոխանակումը կարող է օգտագործվել միայն E2E. Producer չի կարողանա հաղորդագրություններ ուղարկել նման փոխանակման:
Ամփոփում
Համակարգ մշակելիս հարմար է նկարագրել տոպոլոգիան երթուղում օգտագործելով գրաֆիկ: Բայց նախքան գրաֆիկ կառուցելը, արժե առանձնացնել բարձր երթևեկությամբ արահետները, քանի որ. նրանք պահանջում են ավելի բարձր թողունակություն (կատարում): Հաջորդը, դուք կարող եք դասակարգել երթևեկությունը: Եվ հետո սկսեք կառուցել:
Եթե կառուցված գրաֆիկում գոյություն ունի վերջավոր հավաքածու երթուղային ստեղները, ուրեմն, արժե նայել դեպի մի քանիսը fanout exchange, որոնք 1:1 են կապված երթուղային ստեղնի հետ: Հիշիր դա fanout exchange ամենաարագը.
Եթե երթուղիների թիվը ձգտում է դեպի անսահմանություն, արժե ուշադրություն դարձնել topic exchange կամ, եթե ձևանմուշը պետք չէ, ապա կարող եք ընտրել direct exchnge, որովհետեւ նա ավելի արագ է topic exchange.
Տարբեր համակցություններ exchange պետք է օգնի ձեզ գտնել ճիշտը: մասշտաբային կոնֆիգուրացիա, որը համապատասխանում է ինչպես ընթացիկ, այնպես էլ աճող համակարգի պահանջներին:
Թիվ exchange իսկ հերթերը պետք է լինեն նվազագույն՝ համեմատած երթուղիների քանակի հետ:
Հաջորդ հոդվածում մենք կսկսենք ավելին հասկանալ Հերթերի և Կապերի մասին: