Բարի օր, Հաբր: Ուզում եմ կիսվել գիտելիքի դասագիրք-տեղեկատու գրքով, որը կարողացա հավաքել RabbitMQ և խտացնել կարճ առաջարկությունների և եզրակացությունների մեջ:
Պահեստավորված նյութեր
RabbitMQ. Մաս 1. Ներածություն. Erlang, AMQP և RPC
RabbitMQ. Մաս 2. Փոխանակումների ըմբռնում
RabbitMQ. Մաս 3. Հասկանալով հերթերը և կապերը
RabbitMQ. Մաս 4. Հասկանալով, թե ինչ են հաղորդագրությունները և շրջանակները
RabbitMQ. Մաս 5. Հաղորդագրությունների հրապարակում և սպառում
RabbitMQ. Մաս 6. Ֆեդերացիայի և թիակի մոդուլների ակնարկ
RabbitMQ. Մաս 7. Մանրամասներ Connection-ի և Chanel-ի մասին
RabbitMQ. Մաս 8. RabbitMQ .NET-ում
RabbitMQ. Մաս 9. Մոնիտորինգ
Համառոտ AMQP-ի մասին
AMQP (Advanced Message Queuing Protocol) բաց արձանագրություն է համակարգի բաղադրիչների միջև հաղորդագրությունների փոխանցման համար: Հիմնական գաղափարն այն է, որ առանձին ենթահամակարգերը (կամ անկախ հավելվածները) կարող են կամայական կերպով հաղորդագրություններ փոխանակել AMQP բրոքերի միջոցով, որն իրականացնում է երթուղիներ, հնարավոր է երաշխավորում առաքումը, բաշխում է տվյալների հոսքերը և բաժանորդագրվում ցանկալի հաղորդագրությունների տեսակներին:
Արձանագրություն AMQP ներկայացնում է երեք հասկացություն.
exchange (փոխանակման կետ կամ փոխանակում) - հաղորդագրություններ են ուղարկվում դրան: Փոխանակման կետ տարածում է հաղորդագրությունը մեկ կամ մի քանի հերթերում. Նա ուղարկում է հաղորդագրությունները դեպի հերթ ստեղծված հղումների հիման վրա (binding) նրա և հերթի միջև
queue (հերթ) - տվյալների կառուցվածքը սկավառակի վրա կամ RAM-ում, որը պահպանում է հաղորդագրությունների հղումները և տալիս է հաղորդագրությունների պատճենները consumers (սպառողներին)
binding (պարտադիր) - կանոն, որ պատմում է փոխանակման կետին, թե որ հերթում պետք է մտնեն այս հաղորդագրությունները
Ծրագրի սկզբնական կոդը գտնվում է պահոցում՝ հասցեով GitHub. Ճարտարապետություն RabbitMQ-սերվեր հիմնված Էռլանգը եւ BEAM.
Erlang մշակվել է ընկերության կողմից Ericsson 1980-ականների կեսերին որպես բաշխված, սխալ հանդուրժող, իրական ժամանակի համակարգ 99,999% գործարկման ժամանակ պահանջող հավելվածների համար: Erlang օգտագործվում է տարբեր ոլորտներում և ժամանակակից կիրառություններում, օրինակ. WhatsApp. Ավելին կարող եք կարդալ հոդվածում WhatsApp-ի ճարտարապետությունը, որը Facebook-ը գնել է 19 միլիարդ դոլարով
Համառոտ RabbitMQ-ի մասին
Rabbit MQ բաց կոդով հաղորդագրությունների բրոքեր է: Այն ուղղորդում է հաղորդագրությունները արձանագրության բոլոր հիմնական սկզբունքներով AMQP նկարագրված է բնութագրերը. RabbitMQ իրականացնում և լրացնում է արձանագրությունը AMQP.
Հաղորդագրությունների մոդելի հիմնական գաղափարը RabbitMQ բան է producer (հրատարակիչը) հաղորդագրություններ չի ուղարկում անմիջապես հերթին: Իրականում, և բավականին հաճախ, հրատարակիչը նույնիսկ չգիտի, թե արդյոք հաղորդագրությունը կհասցվի որևէ հերթ:
Փոխարենը, հրատարակիչը կարող է միայն հաղորդագրություններ ուղարկել բորսային: Մի կողմից բորսան հաղորդագրություններ է ստանում հրատարակիչներից, իսկ մյուս կողմից դրանք ուղարկում է հերթերի: Փոխանակումը պետք է հստակ իմանա, թե ինչ անել իր ստացած հաղորդագրության հետ: Արդյո՞ք այն պետք է ավելացվի կոնկրետ հերթում: Արդյո՞ք այն պետք է ավելացվի մի քանի հերթերի մեջ: Կամ հաղորդագրությունը պետք է անտեսել:
Համառոտ աշխատանք RabbitMQ կարելի է նկարագրել հետևյալ կերպ.
Հրատարակիչը հաղորդագրություն է ուղարկում կոնկրետ փոխանակման
Փոխանակումը, ստանալով հաղորդագրություն, այն ուղղում է դեպի մեկ կամ մի քանի հերթեր՝ իր և հերթի միջև պարտադիր կանոններին համապատասխան։
Հերթը պահում է հղում այս հաղորդագրությանը: Հաղորդագրությունն ինքնին պահվում է RAM-ում կամ սկավառակի վրա
Երբ սպառողը պատրաստ է հերթից հաղորդագրություն ստանալ, սերվերը ստեղծում է հաղորդագրության պատճենը հղման միջոցով և ուղարկում.
Սպառողը ստանում է հաղորդագրությունը և հաստատում է ուղարկում բրոքերին
Բրոքերը, ստանալով հաստատում, հերթից հեռացնում է հաղորդագրության պատճենը: Հետո ջնջում է RAM-ից և սկավառակից
RPC
պրոցես RPC (հեռավոր ընթացակարգի զանգ) ընկած է միջուկի հետ գրեթե բոլոր փոխազդեցությունների հիմքում RabbitMQ. Օրինակ, նախնական քննարկումները հաճախորդի պայմանների հետ RabbitMQ, ցույց է տալիս որոշակի գործընթաց RPC. Այս հաջորդականությունն ավարտվելուց հետո, RabbitMQ պատրաստ կլինի ընդունել հաճախորդի հարցումները.
Նաև ճշգրտման մեջ AMQP և՛ հաճախորդը, և՛ սերվերը կարող են հրամաններ տալ: Սա նշանակում է, որ հաճախորդը սպասում է սերվերի հետ շփվելուն: Հրամանները դասեր և մեթոդներ են: Օրինակ, Connection.Start - մեթոդի զանգ Start դաս Connection.
Միացում և ալիքներ
Հաճախորդի և սերվերի միջև նման տեղեկատվության փոխանակման համար, ալիքներ. Ալիքները ստեղծվում են ներսում կոնկրետ կապ. Յուրաքանչյուր ալիք մեկուսացված է այլ ալիքներից: Սինխրոն դեպքում հնարավոր չէ կատարել հաջորդ հրամանը, քանի դեռ պատասխան չի ստացվել։
Զուգահեռաբար հրամաններ ուղարկելու համար պետք է մի քանի ալիք բացել։ Յուրաքանչյուր ալիք ստեղծում է առանձին Erlang գործընթաց։ Մեկ կապը կարող է ունենալ մի քանի ալիք (multiplexing). Յուրաքանչյուր ալիքի համար հիշողության մեջ կան որոշակի կառուցվածքներ և առարկաներ: Հետևաբար, որքան շատ ալիքներ լինեն միացման ներսում, այնքան RabbitMQ-ն ավելի շատ հիշողություն է օգտագործում կառավարել նման կապը:
Կապի և ալիքի ստեղծման պարզ օրինակ՝ օգտագործելով RabbitMQ.Client:
// ...
private void TryConnect()
{
var factory = new ConnectionFactory()
{
HostName = "host_name",
UserName = "user_name",
Password = "p@ssword",
// Включение автоматичекого восстановления
// соединения после сбоев сети
AutomaticRecoveryEnabled = true
};
_connection = factory.CreateConnection();
}
// ...
public void CreateChanel()
{
_channel = _connection.CreateModel();
// other options
}
Յուրաքանչյուր գործողության համար նոր կապ բացելը կտրականապես չի խրախուսվում կհանգեցնի բարձր ծախսերի. Ալիքները նույնպես պետք է մշտական լինեն, սակայն արձանագրության բազմաթիվ սխալների պատճառով ալիքը փակվում է, ուստի ալիքի կյանքը կարող է ավելի կարճ լինել, քան կապի ժամկետը:
Որտեղ է օգտագործվում RabbitMQ:
Միկրոծառայությունների համատեքստում արձանագրությունը AMQP և դրա իրականացումը RabbitMQ հաճախ օգտագործվում է ասինխրոն փոխազդեցություն ծառայությունների միջև:
Համատեքստում IIOT արձանագրությունը AMQP և դրա իրականացումը RabbitMQ օգտագործվում է սերվերների միջև տվյալների փոխանակման համար (սերվեր-սերվեր): Օգտագործեք նաև հավելվածը MQTT Plugin RabbitMQ որը հանդիսանում է արձանագրության իրականացում MQTT տվյալների փոխանցման համար սենսորի և սերվերի միջև ցածր արագությամբ, բարձր լատենտ միջավայրում (աջակցվող արձանագրությունների ամբողջական ցանկը նշված է այստեղ նախագծի կայքը).
Հաջորդ հոդվածում մենք կսկսենք ավելի մանրամասն հասկանալ Փոխանակումները: