RabbitMQ. Gawo 1. Chiyambi. Erlang, AMQP

Masana abwino, Habr! Ndikufuna kugawana nawo buku lachidziwitso lachidziwitso chomwe ndidakwanitsa kusonkhanitsa RabbitMQ ndikuphatikiza muzopereka zazifupi ndi ziganizo.

Zamkatimu

  • RabbitMQ. Gawo 1. Chiyambi. Erlang, AMQP ndi RPC
  • RabbitMQ. Gawo 2. Kumvetsetsa Kusinthana
  • RabbitMQ. Gawo 3. Kumvetsetsa Mizere ndi Zomangamanga
  • RabbitMQ. Gawo 4. Kumvetsetsa zomwe mauthenga ndi mafelemu ndi
  • RabbitMQ. Gawo 5: Kusindikiza ndi Kugwiritsa Ntchito Mauthenga
  • RabbitMQ. Gawo 6. mwachidule za Federation ndi Mafosholo Module
  • RabbitMQ. Gawo 7. Tsatanetsatane wa Kulumikizana ndi Chanel
  • RabbitMQ. Gawo 8. RabbitMQ mu .NET
  • RabbitMQ. Gawo 9. Kuwunika

Mwachidule za AMQP

AMQP (Advanced Message Queuing Protocol) ndi njira yotseguka yotumizira mauthenga pakati pa zigawo zamakina. Lingaliro lalikulu ndilakuti magulu ang'onoang'ono (kapena mapulogalamu odziyimira pawokha) amatha kusinthana mauthenga mosasamala kudzera mwa broker ya AMQP, yomwe imayendetsa, mwina imatsimikizira kutumiza, kugawa ma data, ndikulembetsa mitundu yomwe mukufuna.

Pulogalamu AMQP imabweretsa malingaliro atatu:

RabbitMQ. Gawo 1. Chiyambi. Erlang, AMQP

  • exchange (malo osinthanitsa kapena kusinthanitsa) - mauthenga amatumizidwa kwa izo. Kusinthana mfundo amagawa uthenga pamzere umodzi kapena zingapo. Iye amatumiza mauthenga pamzere kutengera maulalo opangidwa (binding) pakati pa iye ndi mzere
  • queue (mzere) - dongosolo la data pa disk kapena mu RAM kuti amasunga maulalo a mauthenga ndikupereka makope a mauthenga consumers (kwa ogula)
  • binding (kumanga) - lamulo kuti imauza malo osinthira omwe mauthengawa akuyenera kulowa

Protocol imayenda pamwamba TCP / IP.

Mwachidule za Erlang

Khodi yoyambira polojekitiyi ili munkhokwe ku GitHub. Zomangamanga RabbitMQ-seva kutengera erlang ndi BEAM.

Erlang yopangidwa ndi kampaniyo Ericsson mkati mwa zaka za m'ma 1980 monga njira yogawidwa, yolekerera zolakwika, nthawi yeniyeni yogwiritsira ntchito zomwe zimafuna 99,999% uptime. Erlang amagwiritsidwa ntchito m'mafakitale osiyanasiyana ndi ntchito zamakono, mwachitsanzo. WhatsApp. Mutha kuwerenga zambiri m'nkhaniyi Zomangamanga za WhatsApp, zomwe Facebook idagula $ 19 biliyoni

Mwachidule za RabbitMQ

KaluluMQ ndi open source message broker. Imatumiza mauthenga motsatira mfundo zonse zofunika za protocol Zamgululi zofotokozedwa mu zofunika. RabbitMQ imagwiritsa ntchito ndikuwonjezera protocol AMQP.

Lingaliro lalikulu lachitsanzo cha mauthenga mu RabbitMQ chinthu ndichakuti producer (wosindikiza) samatumiza mauthenga mwachindunji pamzere. M'malo mwake, ndipo nthawi zambiri, wosindikiza sadziwa nkomwe ngati uthengawo udzaperekedwa pamzere uliwonse.

M'malo mwake, wofalitsayo amatha kutumiza mauthenga ku kusinthana. Kumbali ina, kusinthanitsa kumalandira mauthenga kuchokera kwa ofalitsa, ndipo kumbali ina, kumawatumiza ku mizere. Kusinthanitsa kuyenera kudziwa zenizeni zoyenera kuchita ndi uthenga womwe walandira. Kodi iwonjezedwa pamzere wina wake? Kodi ziyenera kuwonjezeredwa pamizere ingapo? Kapena uthengawo uyenera kunyalanyazidwa.

RabbitMQ. Gawo 1. Chiyambi. Erlang, AMQP

Ntchito yachidule RabbitMQ akhoza kufotokozedwa motere:

  1. Wofalitsa amatumiza uthenga ku kusinthana kwapadera
  2. Kusinthana, kutalandira uthenga, kumawatumizira pamzere umodzi kapena zingapo malinga ndi malamulo omangiriza pakati pake ndi mzerewo.
  3. Mzerewu umasunga zonena za uthengawu. Uthengawo umasungidwa mu RAM kapena pa disk
  4. Wogula akakonzeka kulandira uthenga kuchokera pamzere, seva imapanga kopi ya uthengawo kudzera pa ulalo ndikutumiza.
  5. Wogula amalandira uthenga ndikutumiza chitsimikiziro kwa broker
  6. Wogulitsayo, atalandira chitsimikiziro, amachotsa kopi ya uthenga kuchokera pamzere. Ndiye deletes ku RAM ndi litayamba

CPR

ndondomeko RPC (kuyitana kwakutali) imayambitsa pafupifupi kuyanjana konse ndi phata RabbitMQ. Mwachitsanzo, kukambirana koyamba za zomwe kasitomala akufuna ndi RabbitMQ, imasonyeza njira inayake RPC. Izi zikatha, RabbitMQ adzakhala okonzeka kuvomereza zopempha kuchokera kwa kasitomala:

RabbitMQ. Gawo 1. Chiyambi. Erlang, AMQP

Komanso mu specifications AMQP onse kasitomala ndi seva akhoza kutulutsa malamulo. Izi zikutanthauza kuti kasitomala akuyembekezera kulankhulana ndi seva. Malamulo ndi makalasi ndi njira. Mwachitsanzo, Connection.Start - njira yothetsera Start kalasi Connection.

Kulumikizana ndi njira

Pakusinthanitsa zidziwitso zotere pakati pa kasitomala ndi seva, njira. Makanema amapangidwa mkati kugwirizana kwapadera. Chanelo chilichonse chimakhala chodzipatula kumayendedwe ena. Muzochitika zofananira, sizingatheke kuchita lamulo lotsatira mpaka yankho lilandiridwa.

Kuti muthe kutumiza malamulo mofanana, muyenera kutsegula njira zingapo. Njira iliyonse imapanga yosiyana Erlang ndondomeko. Kulumikizana kumodzi kumatha kukhala ndi njira zingapo (kuchulukitsa). Pa njira iliyonse pali zomangira ndi zinthu zina zomwe zimakumbukiridwa. Chifukwa chake, ngati pali njira zambiri zolumikizirana, ndiye kuti RabbitMQ imagwiritsa ntchito kukumbukira kwambiri kusamalira kulumikizana koteroko.

RabbitMQ. Gawo 1. Chiyambi. Erlang, AMQP

Chitsanzo chophweka chopanga kugwirizana ndi njira yogwiritsira ntchito KaluluMQ.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 
}

Kutsegula kugwirizana kwatsopano kwa ntchito iliyonse kumakhumudwitsidwa kwambiri monga izi zidzabweretsa kukwera mtengo. Njira ziyeneranso kukhala zolimbikira, koma zolakwika zambiri za protocol zimapangitsa kuti njirayo itseke, kotero kuti moyo wa tchanelo ukhoza kukhala wamfupi kuposa wa kugwirizana.

Kodi RabbitMQ amagwiritsidwa ntchito pati?

Pankhani ya microservices, protocol AMQP ndi kukhazikitsidwa kwake mu RabbitMQ nthawi zambiri amagwiritsidwa ntchito kuyanjana kwa asynchronous pakati pa mautumiki.

M'nkhani yake IIOT protocol AMQP ndi kukhazikitsidwa kwake mu RabbitMQ amagwiritsidwa ntchito pakusinthana kwa data pakati pa ma seva (seva-seva). Gwiritsaninso ntchito pulogalamu yowonjezera Pulogalamu ya MQTT RabbitMQ chomwe chiri kukhazikitsidwa kwa protocol MQTT potumiza deta pakati pa sensa ndi seva m'malo othamanga kwambiri, otsika kwambiri (mndandanda wathunthu wama protocol omwe amathandizidwa adalembedwa pa tsamba la polojekiti).

M'nkhani yotsatira tiyamba kumvetsetsa Kusinthanitsa mwatsatanetsatane.

powatsimikizira

Source: www.habr.com

Kuwonjezera ndemanga