CoineanachMQ. Pàirt 1. Ro-ràdh. Erlang, AMQP

Feasgar math, Habr! Tha mi airson leabhar fiosrachaidh leabhar-teacsa a cho-roinn a fhuair mi air cruinneachadh RabbitMQ agus dlùthachadh ann am molaidhean goirid agus co-dhùnaidhean.

Clàr-innse

  • CoineanachMQ. Pàirt 1. Ro-ràdh. Erlang, AMQP agus RPC
  • CoineanachMQ. Pàirt 2. Tuigse iomlaidean
  • CoineanachMQ. Pàirt 3. Tuigsinn ciudha agus ceanglachan
  • CoineanachMQ. Pàirt 4. A 'tuigsinn dè na teachdaireachdan agus frèaman
  • CoineanachMQ. Pàirt 5: Foillseachadh Teachdaireachd agus Coileanadh Consumtion
  • CoineanachMQ. Pàirt 6. Sealladh farsaing air a 'Chaidreachas agus Modalan Sluasaid
  • CoineanachMQ. Pàirt 7. Mion-fhiosrachadh mu Ceangal agus Chanel
  • CoineanachMQ. Pàirt 8. RabbitMQ ann an .NET
  • CoineanachMQ. Pàirt 9. Sgrùdadh

Beagan mu dheidhinn AMQP

Tha AMQP (Pròtacal Ciudha Teachdaireachd Adhartach) na phròtacal fosgailte airson teachdaireachdan a chuir eadar co-phàirtean siostam. Is e am beachd bunaiteach gum faod fo-shiostaman fa leth (no tagraidhean neo-eisimeileach) teachdaireachdan iomlaid ann an dòigh neo-riaghailteach tro broker AMQP, a bhios a’ coileanadh slighe, is dòcha a ’gealltainn lìbhrigeadh, a’ cuairteachadh sruthan dàta, agus a ’fo-sgrìobhadh do na seòrsaichean teachdaireachd a tha thu ag iarraidh.

Pròtacal AMQP toirt a-steach trì bun-bheachdan:

CoineanachMQ. Pàirt 1. Ro-ràdh. Erlang, AMQP

  • exchange (puing iomlaid no iomlaid) - thèid teachdaireachdan a chuir thuige. Puing iomlaid a 'sgaoileadh an teachdaireachd ann an aon no barrachd ciudha. Tha i slighean teachdaireachdan gu ciudha stèidhichte air ceanglaichean cruthaichte (binding) eadar e agus an ciudha
  • queue (ciudha) - structar dàta air diosc no ann an RAM a tha a’ stòradh cheanglaichean ri teachdaireachdan agus a’ toirt seachad lethbhric de theachdaireachdan consumers (do luchd-cleachdaidh)
  • binding (ceangailteach) - riaghailt a tha ag innse don phuing iomlaid air am bu chòir na teachdaireachdan sin a dhol a-steach

Tha am protocol a 'ruith air a' mhullach TCP / IP.

Beagan mu dheidhinn Erlang

Tha còd stòr a’ phròiseict anns an ionad-tasgaidh aig GitHub. Ailtireachd RabbitMQ-frithealaiche Stèidhichte air erlang agus BEAM.

Erlang air a leasachadh leis a’ chompanaidh Ericsson ann am meadhan nan 1980n mar shiostam sgaoilte, fulangach, fìor-ùine airson tagraidhean a dh’ fheumas 99,999% uptime. Erlang air a chleachdadh ann an diofar ghnìomhachasan agus iarrtasan an latha an-diugh, m.e. WhatsApp. Faodaidh tu barrachd a leughadh san artaigil Ailtireachd WhatsApp, a cheannaich Facebook airson $ 19 billean

Beagan mu dheidhinn RabbitMQ

CoineanachMQ na broker teachdaireachd stòr fosgailte. Bidh e a’ stiùireadh teachdaireachdan a rèir prionnsapalan bunaiteach a’ phròtacal AMQP air a mhìneachadh ann an sònrachaidhean. RabbitMQ a’ cur an gnìomh agus a’ cur ris a’ phròtacal AMQP.

Am prìomh bheachd air a 'mhodail teachdaireachd ann an RabbitMQ rud a th ’ann producer (foillsichear) nach cuir teachdaireachdan gu dìreach chun ciudha. Gu dearbh, agus gu math tric, chan eil fios aig an fhoillsichear an tèid an teachdaireachd a lìbhrigeadh gu ciudha sam bith idir.

An àite sin, chan urrainn don fhoillsichear ach teachdaireachdan a chuir chun iomlaid. Air an aon làimh, bidh an iomlaid a 'faighinn teachdaireachdan bho fhoillsichearan, agus air an làimh eile, bidh e gan cur gu ciudhaichean. Feumaidh fios a bhith aig an iomlaid dè dìreach a nì e leis an teachdaireachd a gheibh e. Am bu chòir a chur ri ciudha sònraichte? Am bu chòir a chur ri ioma ciudha? No bu chòir an teachdaireachd a leigeil seachad.

CoineanachMQ. Pàirt 1. Ro-ràdh. Erlang, AMQP

Obair ghoirid RabbitMQ faodar a mhìneachadh mar a leanas:

  1. Bidh am foillsichear a’ cur teachdaireachd gu iomlaid sònraichte
  2. Bidh iomlaid, às deidh dha teachdaireachd fhaighinn, ga stiùireadh gu aon ciudha no barrachd a rèir nan riaghailtean ceangail eadar e agus an ciudha
  3. Bidh an ciudha a’ stòradh iomradh air a’ bhrath seo. Tha an teachdaireachd fhèin air a stòradh ann an RAM no air diosc
  4. Cho luath ‘s a bhios an neach-cleachdaidh deiseil airson teachdaireachd fhaighinn bhon ciudha, cruthaichidh am frithealaiche leth-bhreac den teachdaireachd tron ​​​​cheangal agus cuiridh e
  5. Bidh an neach-cleachdaidh a 'faighinn an teachdaireachd agus a' cur dearbhadh chun a 'bhròcair
  6. Bidh am broker, nuair a gheibh e dearbhadh, a’ toirt air falbh leth-bhreac den teachdaireachd bhon ciudha. An uairsin cuir às do RAM agus diosc

RPC

phròiseas RPC (gairm modh-obrach iomallach) Tha e na bhunait airson cha mhòr a h-uile eadar-obrachadh leis an niuclas RabbitMQ. Mar eisimpleir, còmhraidhean tùsail mu theirmean an neach-dèiligidh le RabbitMQ, a 'sealltainn pròiseas sònraichte RPC. Nuair a bhios an t-sreath seo deiseil, RabbitMQ bidh e deiseil airson gabhail ri iarrtasan bhon neach-dèiligidh:

CoineanachMQ. Pàirt 1. Ro-ràdh. Erlang, AMQP

Cuideachd anns an t-sònrachadh AMQP faodaidh an dà chuid an neach-dèiligidh agus an fhrithealaiche òrdughan a thoirt seachad. Tha seo a 'ciallachadh gu bheil an neach-dèiligidh a' feitheamh gus conaltradh leis an fhrithealaiche. Is e òrdughan clasaichean agus modhan. Mar eisimpleir, Connection.Start - gairm modh Start clas Connection.

Ceangal agus sianalan

Airson iomlaid fiosrachaidh mar sin eadar teachdaiche agus frithealaiche, seanalan. Tha sianalan air an cruthachadh taobh a-staigh ceangal sònraichte. Tha gach sianal air leth bho sheanalan eile. Anns a’ chùis sioncronaich, chan eil e comasach an ath àithne a chuir an gnìomh gus am faighear freagairt.

Gus an urrainn dhut òrdughan a chuir ann an co-shìnte, feumaidh tu grunn shianalan fhosgladh. Bidh gach sianal a 'cruthachadh fa leth Erlang phròiseas. Faodaidh iomadh seanal a bhith aig aon cheangal (iomadachadh). Airson gach sianal tha cuid de structaran agus nithean mar chuimhneachan. Mar sin, mar as motha de shianalan a tha taobh a-staigh ceangal, bidh an Bidh RabbitMQ a’ cleachdadh barrachd cuimhne gus a leithid de cheangal a riaghladh.

CoineanachMQ. Pàirt 1. Ro-ràdh. Erlang, AMQP

Eisimpleir shìmplidh de bhith a 'cruthachadh ceangal agus sianal a' cleachdadh 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 
}

Thathas a’ dì-mhisneachadh gu làidir ceangal ùr fhosgladh airson gach gnìomh mar seo bheir sin gu cosgaisean àrda. Bu chòir seanalan a bhith seasmhach cuideachd, ach tha mòran mhearachdan protocol ag adhbhrachadh gun dùin an t-sianal, agus mar sin faodaidh beatha an t-seanail a bhith nas giorra na beatha a’ cheangail.

Càite an cleachdar RabbitMQ?

Ann an co-theacsa microservices, tha am protocol AMQP agus a bhuileachadh ann an RabbitMQ gu tric air a chleachdadh airson eadar-obrachadh asyncronach eadar seirbheisean.

Ann an co-theacsa IIOT protocol AMQP agus a bhuileachadh ann an RabbitMQ air a chleachdadh airson iomlaid dàta eadar frithealaichean (server-server). Cleachd am plugan cuideachd Plugin MQTT RabbitMQ a tha na bhuileachadh air a’ phròtacal MQTT airson dàta a thar-chuir eadar sensor agus frithealaiche ann an àrainneachdan aig astar ìosal, àrd-latency (tha làn liosta de phròtacalan le taic air an liostadh aig làrach a ’phròiseict).

Anns an ath artaigil bidh sinn a 'tòiseachadh a' tuigsinn Exchanges ann am barrachd mionaideachd.

iomraidhean

Source: www.habr.com

Cuir beachd ann