RabbitMQ. Chikamu 1. Nhanganyaya. Erlang, AMQP

Masikati akanaka, Habr! Ndinoda kugovera bhuku-referensi bhuku reruzivo iro ndakakwanisa kuunganidza pariri RabbitMQ uye kupindirana mupfupi mazano uye mhedziso.

Tafura yezvinyorwa

  • RabbitMQ. Chikamu 1. Nhanganyaya. Erlang, AMQP uye RPC
  • RabbitMQ. Chikamu 2. Kunzwisisa Kuchinjana
  • RabbitMQ. Chikamu 3. Kunzwisisa Mitsetse uye Zvisungo
  • RabbitMQ. Chikamu 4. Kunzwisisa kuti mameseji nemafuremu ndeapi
  • RabbitMQ. Chikamu 5: Kudhinda uye Kushandisa Mharidzo Kuita
  • RabbitMQ. Chikamu 6. Mhedziso yeFederation uye Shovel Modules
  • RabbitMQ. Chikamu 7. Tsanangudzo nezve Connection uye Chanel
  • RabbitMQ. Chikamu 8. RabbitMQ mu.NET
  • RabbitMQ. Chikamu 9. Kuongorora

Muchidimbu nezve AMQP

AMQP (Advanced Message Queuing Protocol) iprotocol yakavhurika yekutumira mameseji pakati pezvikamu zvehurongwa. Pfungwa huru ndeyokuti ma-subsystems ega ega (kana maapplication akazvimirira) anogona kuchinjana mameseji nenzira isina tsarukano kuburikidza ne AMQP broker, inoita routing, pamwe inovimbisa kuendesa, inogovera data hova, uye kunyorera kune yaunoda meseji mhando.

Protocol AMQP inoburitsa pfungwa nhatu:

RabbitMQ. Chikamu 1. Nhanganyaya. Erlang, AMQP

  • exchange (kuchinjana nzvimbo kana kuchinjana) - mameseji anotumirwa kwairi. Exchange point anoparadzira meseji mumutsetse mumwe kana kupfuura. Iye inoendesa mameseji kumutsetse zvichibva pane zvakabatanidzwa zvakabatanidzwa (binding) pakati pake nemutsara
  • queue (mutsara) - chimiro che data pane diski kana mu RAM iyo inochengetedza zvinongedzo kumeseji uye inopa makopi emameseji consumers (kune vatengi)
  • binding (kusunga) - mutemo uyo inotaurira nzvimbo yekuchinjana iyo mutsara unofanirwa kupinda mameseji aya

Iyo protocol inomhanya pamusoro TCP / IP.

Muchidimbu nezve Erlang

Iyo purojekiti kodhi kodhi iri munzvimbo inochengeterwa pa GitHub. Architecture RabbitMQ-server maererano ne erlang uye BEAM.

Erlang yakagadzirwa nekambani Ericsson pakati pe-1980s seyakagoverwa, kukanganisa-kushivirira, chaiyo-nguva system yezvikumbiro zvinoda 99,999% uptime. Erlang inoshandiswa mumaindasitiri akasiyana-siyana uye kushandiswa kwemazuva ano, semuenzaniso. WhatsApp. Iwe unogona kuverenga zvakawanda munyaya yacho WhatsApp architecture, iyo Facebook yakatenga ne $ 19 bhiriyoni

Muchidimbu nezve RabbitMQ

TsuroMQ ndeye yakavhurwa sosi meseji broker. Inoendesa mameseji pamwe chete nemisimboti yekutanga yeprotocol AMQP inotsanangurwa mu kutaurwa. RabbitMQ inoshandisa uye inowedzera iyo protocol AMQP.

Pfungwa huru yeiyo meseji modhi mu RabbitMQ chinhu ndeche producer (muparidzi) haatumire mameseji zvakananga kumutsara. Muchokwadi, uye kazhinji, muparidzi haatomboziva kana meseji ichaunzwa kune chero mutsara zvachose.

Pane kudaro, muparidzi anogona chete kutumira mameseji kune shanduko. Kune rimwe divi, dhizaini inogamuchira mameseji kubva kuvaparidzi, uye kune rumwe rutivi, inovatumira kumitsetse. Kutsinhana kunofanira kunyatsoziva zvekuita neshoko raanogamuchira. Inofanira kuwedzerwa kune chaiyo mutsara here? Inofanira kuwedzerwa kumitsetse yakawanda here? Kana kuti meseji yacho haifanire kufuratirwa.

RabbitMQ. Chikamu 1. Nhanganyaya. Erlang, AMQP

Basa pfupi RabbitMQ inogona kutsanangurwa sezvinotevera:

  1. Muparidzi anotumira meseji kune imwe shanduko
  2. Kutsinhana, kana yagamuchira meseji, inoiendesa kune imwe kana kupfuura mutsara zvinoenderana nemitemo inosunga pakati payo nemutsara.
  3. Mutsara unochengeta chirevo cheshoko iri. Iyo meseji pachayo inochengetwa mu RAM kana pa diski
  4. Kana mutengi agadzirira kugamuchira meseji kubva kumutsara, sevha inogadzira kopi yemeseji kuburikidza neiyi link uye inotumira.
  5. Mutengi anogamuchira meseji uye anotumira simbiso kune broker
  6. Mutengesi, paanogamuchira kusimbiswa, anobvisa kopi yemeseji kubva pamutsetse. Wobva wabvisa kubva RAM uye dhisiki

RPC

gadzira RPC (remote process call) ndiyo inokonzeresa kudyidzana kwese nenyukisi RabbitMQ. Semuenzaniso, hurukuro dzekutanga pamusoro pematemu emutengi ne RabbitMQ, inoratidza imwe nzira RPC. Kana kutevedzana uku kwapera, RabbitMQ ichave yakagadzirira kugamuchira zvikumbiro kubva kune mutengi:

RabbitMQ. Chikamu 1. Nhanganyaya. Erlang, AMQP

Uyewo mune tsanangudzo AMQP zvese mutengi neserver zvinogona kuburitsa mirairo. Izvi zvinoreva kuti mutengi akamirira kutaurirana neserver. Mirairo makirasi uye nzira. Semuyenzaniso, Connection.Start - nzira yekufona Start kirasi Connection.

Connection uye chiteshi

Kuti uwane ruzivo rwakadai pakati pemutengi neseva, migero. Zviteshi zvinogadzirwa mukati chaiyo kubatana. Imwe neimwe chiteshi yakaparadzaniswa kubva kune mamwe chiteshi. Muchiitiko chesynchronous, hazvigoneke kuita murairo unotevera kusvikira mhinduro yagamuchirwa.

Kuti ukwanise kutumira mirairo mune zvakafanana, unofanirwa kuvhura nzira dzinoverengeka. Imwe neimwe chiteshi inogadzira yakaparadzana Erlang process. Imwe yekubatanidza inogona kuva nematanho akawanda (multiplexing) Kune yega yega chiteshi pane zvimwe zvimiro uye zvinhu mundangariro. Naizvozvo, iyo yakawanda chiteshi chiripo mukati mekubatana, iyo RabbitMQ inoshandisa imwe ndangariro kugadzirisa kubatana kwakadaro.

RabbitMQ. Chikamu 1. Nhanganyaya. Erlang, AMQP

Muenzaniso wakapfava wekugadzira chinongedzo uye chiteshi uchishandisa 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 
}

Kuvhura chinongedzo chitsva chekushanda kwega kwega kunorambidzwa zvakanyanya seizvi zvinozotungamira kumitengo yakakwira. Zviteshi zvinofanirwawo kushingirira, asi zvikanganiso zvakawanda zveprotocol zvinoita kuti chiteshi chivhare, saka hupenyu hwechiteshi hunogona kunge hupfupi pane hwekubatanidza.

RabbitMQ inoshandiswa kupi?

Muchirevo che microservices, iyo protocol AMQP uye kushandiswa kwayo mu RabbitMQ kazhinji inoshandiswa kupindirana kweasynchronous pakati pemasevhisi.

Muchirevo chechinyorwa IIOT protocol AMQP uye kushandiswa kwayo mu RabbitMQ inoshandiswa kuchinjanisa data pakati pemaseva (server-server). Uyewo shandisa plugin MQTT Plugin RabbitMQ inova iyo inoshandiswa kweprotocol MQTT yekufambisa data pakati pe sensor uye server munzvimbo yakaderera-kumhanya, yakakwirira-latency nharaunda (runyorwa ruzere rwemaprotocol anotsigirwa akanyorwa pa projekiti webhusaiti).

Munyaya inotevera tichatanga kunzwisisa Exchanges zvakadzama.

nezvakanyorwa

Source: www.habr.com

Voeg