RabbitMQ. Մաս 1. Ներածություն. Էրլանգ, AMQP

Բարի օր, Հաբր: Ուզում եմ կիսվել գիտելիքի դասագիրք-տեղեկատու գրքով, որը կարողացա հավաքել 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 ներկայացնում է երեք հասկացություն.

RabbitMQ. Մաս 1. Ներածություն. Էրլանգ, AMQP

  • exchange (փոխանակման կետ կամ փոխանակում) - հաղորդագրություններ են ուղարկվում դրան: Փոխանակման կետ տարածում է հաղորդագրությունը մեկ կամ մի քանի հերթերում. Նա ուղարկում է հաղորդագրությունները դեպի հերթ ստեղծված հղումների հիման վրա (binding) նրա և հերթի միջև
  • queue (հերթ) - տվյալների կառուցվածքը սկավառակի վրա կամ RAM-ում, որը պահպանում է հաղորդագրությունների հղումները և տալիս է հաղորդագրությունների պատճենները consumers (սպառողներին)
  • binding (պարտադիր) - կանոն, որ պատմում է փոխանակման կետին, թե որ հերթում պետք է մտնեն այս հաղորդագրությունները

Արձանագրությունն աշխատում է վերևում TCP / IP.

Համառոտ Էրլանգի մասին

Ծրագրի սկզբնական կոդը գտնվում է պահոցում՝ հասցեով GitHub. Ճարտարապետություն RabbitMQ-սերվեր հիմնված Էռլանգը եւ BEAM.

Erlang մշակվել է ընկերության կողմից Ericsson 1980-ականների կեսերին որպես բաշխված, սխալ հանդուրժող, իրական ժամանակի համակարգ 99,999% գործարկման ժամանակ պահանջող հավելվածների համար: Erlang օգտագործվում է տարբեր ոլորտներում և ժամանակակից կիրառություններում, օրինակ. WhatsApp. Ավելին կարող եք կարդալ հոդվածում WhatsApp-ի ճարտարապետությունը, որը Facebook-ը գնել է 19 միլիարդ դոլարով

Համառոտ RabbitMQ-ի մասին

Rabbit MQ բաց կոդով հաղորդագրությունների բրոքեր է: Այն ուղղորդում է հաղորդագրությունները արձանագրության բոլոր հիմնական սկզբունքներով AMQP նկարագրված է բնութագրերը. RabbitMQ իրականացնում և լրացնում է արձանագրությունը AMQP.

Հաղորդագրությունների մոդելի հիմնական գաղափարը RabbitMQ բան է producer (հրատարակիչը) հաղորդագրություններ չի ուղարկում անմիջապես հերթին: Իրականում, և բավականին հաճախ, հրատարակիչը նույնիսկ չգիտի, թե արդյոք հաղորդագրությունը կհասցվի որևէ հերթ:

Փոխարենը, հրատարակիչը կարող է միայն հաղորդագրություններ ուղարկել բորսային: Մի կողմից բորսան հաղորդագրություններ է ստանում հրատարակիչներից, իսկ մյուս կողմից դրանք ուղարկում է հերթերի: Փոխանակումը պետք է հստակ իմանա, թե ինչ անել իր ստացած հաղորդագրության հետ: Արդյո՞ք այն պետք է ավելացվի կոնկրետ հերթում: Արդյո՞ք այն պետք է ավելացվի մի քանի հերթերի մեջ: Կամ հաղորդագրությունը պետք է անտեսել:

RabbitMQ. Մաս 1. Ներածություն. Էրլանգ, AMQP

Համառոտ աշխատանք RabbitMQ կարելի է նկարագրել հետևյալ կերպ.

  1. Հրատարակիչը հաղորդագրություն է ուղարկում կոնկրետ փոխանակման
  2. Փոխանակումը, ստանալով հաղորդագրություն, այն ուղղում է դեպի մեկ կամ մի քանի հերթեր՝ իր և հերթի միջև պարտադիր կանոններին համապատասխան։
  3. Հերթը պահում է հղում այս հաղորդագրությանը: Հաղորդագրությունն ինքնին պահվում է RAM-ում կամ սկավառակի վրա
  4. Երբ սպառողը պատրաստ է հերթից հաղորդագրություն ստանալ, սերվերը ստեղծում է հաղորդագրության պատճենը հղման միջոցով և ուղարկում.
  5. Սպառողը ստանում է հաղորդագրությունը և հաստատում է ուղարկում բրոքերին
  6. Բրոքերը, ստանալով հաստատում, հերթից հեռացնում է հաղորդագրության պատճենը: Հետո ջնջում է RAM-ից և սկավառակից

RPC

պրոցես RPC (հեռավոր ընթացակարգի զանգ) ընկած է միջուկի հետ գրեթե բոլոր փոխազդեցությունների հիմքում RabbitMQ. Օրինակ, նախնական քննարկումները հաճախորդի պայմանների հետ RabbitMQ, ցույց է տալիս որոշակի գործընթաց RPC. Այս հաջորդականությունն ավարտվելուց հետո, RabbitMQ պատրաստ կլինի ընդունել հաճախորդի հարցումները.

RabbitMQ. Մաս 1. Ներածություն. Էրլանգ, AMQP

Նաև ճշգրտման մեջ AMQP և՛ հաճախորդը, և՛ սերվերը կարող են հրամաններ տալ: Սա նշանակում է, որ հաճախորդը սպասում է սերվերի հետ շփվելուն: Հրամանները դասեր և մեթոդներ են: Օրինակ, Connection.Start - մեթոդի զանգ Start դաս Connection.

Միացում և ալիքներ

Հաճախորդի և սերվերի միջև նման տեղեկատվության փոխանակման համար, ալիքներ. Ալիքները ստեղծվում են ներսում կոնկրետ կապ. Յուրաքանչյուր ալիք մեկուսացված է այլ ալիքներից: Սինխրոն դեպքում հնարավոր չէ կատարել հաջորդ հրամանը, քանի դեռ պատասխան չի ստացվել։

Զուգահեռաբար հրամաններ ուղարկելու համար պետք է մի քանի ալիք բացել։ Յուրաքանչյուր ալիք ստեղծում է առանձին Erlang գործընթաց։ Մեկ կապը կարող է ունենալ մի քանի ալիք (multiplexing). Յուրաքանչյուր ալիքի համար հիշողության մեջ կան որոշակի կառուցվածքներ և առարկաներ: Հետևաբար, որքան շատ ալիքներ լինեն միացման ներսում, այնքան RabbitMQ-ն ավելի շատ հիշողություն է օգտագործում կառավարել նման կապը:

RabbitMQ. Մաս 1. Ներածություն. Էրլանգ, AMQP

Կապի և ալիքի ստեղծման պարզ օրինակ՝ օգտագործելով 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 տվյալների փոխանցման համար սենսորի և սերվերի միջև ցածր արագությամբ, բարձր լատենտ միջավայրում (աջակցվող արձանագրությունների ամբողջական ցանկը նշված է այստեղ նախագծի կայքը).

Հաջորդ հոդվածում մենք կսկսենք ավելի մանրամասն հասկանալ Փոխանակումները:

Սայլակ

Source: www.habr.com

Добавить комментарий