RabbitMQ. Parti 1. Introduzzjoni. Erlang, AMQP

Wara nofsinhar it-tajjeb, Habr! Irrid naqsam ktieb ta' referenza ta' tagħrif li rnexxieli niġbor fuqu RabbitMQ u jikkondensa f'rakkomandazzjonijiet u konklużjonijiet qosra.

Tabella tal-kontenut

  • RabbitMQ. Parti 1. Introduzzjoni. Erlang, AMQP u RPC
  • RabbitMQ. Parti 2. Fehim Skambji
  • RabbitMQ. Parti 3. Nifhmu l-Kjuwijiet u l-Irbit
  • RabbitMQ. Parti 4. Nifhmu x'inhuma messaġġi u frames
  • RabbitMQ. Parti 5: Pubblikazzjoni tal-Messaġġ u Prestazzjoni tal-Konsum
  • RabbitMQ. Parti 6. Reviżjoni tal-moduli tal-Federazzjoni u tal-Pala
  • RabbitMQ. Parti 7. Dettalji dwar Konnessjoni u Chanel
  • RabbitMQ. Parti 8. RabbitMQ f'.NET
  • RabbitMQ. Parti 9. Monitoraġġ

Fil-qosor dwar AMQP

AMQP (Advanced Message Queuing Protocol) huwa protokoll miftuħ għat-trażmissjoni ta' messaġġi bejn il-komponenti tas-sistema. L-idea bażika hija li sottosistemi individwali (jew applikazzjonijiet indipendenti) jistgħu jiskambjaw messaġġi b'mod arbitrarju permezz ta 'sensar AMQP, li jwettaq ir-rotot, possibilment jiggarantixxi l-kunsinna, iqassam flussi ta' data, u jissottoskrivi għat-tipi ta 'messaġġi mixtieqa.

Protokoll AMQP jintroduċi tliet kunċetti:

RabbitMQ. Parti 1. Introduzzjoni. Erlang, AMQP

  • exchange (punt ta 'skambju jew skambju) - messaġġi jintbagħtu lilha. Punt ta' skambju iqassam messaġġ fi kju wieħed jew aktar. Hi iwassal messaġġi għal kju ibbażat fuq il-konnessjonijiet maħluqa (binding) bejnu u l-kju
  • queue (kju) - struttura tad-data fuq disk jew RAM li jaħżen links għal messaġġi u jagħti kopji tal-messaġġi consumers (għall-konsumaturi)
  • binding (vinkolanti) - regola li jgħid lill-punt tal-iskambju f'liema kju għandhom jidħlu dawn il-messaġġi

Il-protokoll jimxi fuq nett TCP / IP.

Fil-qosor dwar Erlang

Il-kodiċi tas-sors tal-proġett jinsab fir-repożitorju fuq GitHub. Arkitettura RabbitMQ-server ibbażat fuq erlang u TRAVU.

Erlang żviluppati mill-kumpanija Ericsson f'nofs is-snin tmenin bħala sistema distribwita, tolleranti għall-ħsarat, f'ħin reali għal applikazzjonijiet li jeħtieġu 1980% uptime. Erlang użati f'diversi industriji u applikazzjonijiet moderni, eż. WhatsApp. Tista' taqra aktar fl-artiklu L-arkitettura ta’ WhatsApp, li Facebook xtara għal $19-il biljun

Fil-qosor dwar RabbitMQ

Fenek MQ huwa sensar messaġġ open source. Hija rotot messaġġi tul il-prinċipji bażiċi kollha tal-protokoll AMQP deskritt fi speċifikazzjonijiet. RabbitMQ jimplimenta u jissupplimenta l-protokoll AMQP.

L-idea ewlenija tal-mudell tal-messaġġi fi RabbitMQ ħaġa hi producer (pubblikatur) ma jibgħatx messaġġi direttament lill-kju. Fil-fatt, u ħafna drabi, il-pubblikatur lanqas biss jaf jekk il-messaġġ hux se jitwassal f'xi kju.

Minflok, il-pubblikatur jista 'biss jibgħat messaġġi lill-iskambju. Min-naħa waħda, l-iskambju jirċievi messaġġi mill-pubblikaturi, u min-naħa l-oħra, jibgħathom fil-kjuwijiet. L-iskambju għandu jkun jaf eżatt x'għandu jagħmel bil-messaġġ li jirċievi. Għandu jiġi miżjud ma 'kju speċifiku? Għandu jiġi miżjud ma 'kjuwijiet multipli? Jew il-messaġġ għandu jiġi injorat.

RabbitMQ. Parti 1. Introduzzjoni. Erlang, AMQP

Xogħol qasir RabbitMQ jistgħu jiġu deskritti kif ġej:

  1. Il-pubblikatur jibgħat messaġġ lil skambju speċifiku
  2. Skambju, wara li jkun irċieva messaġġ, jgħaddih lejn kju wieħed jew aktar skont ir-regoli vinkolanti bejnu u l-kju
  3. Il-kju jaħżen referenza għal dan il-messaġġ. Il-messaġġ innifsu huwa maħżun fir-RAM jew fuq disk
  4. Ladarba l-konsumatur ikun lest li jirċievi messaġġ mill-kju, is-server joħloq kopja tal-messaġġ permezz tal-link u jibgħat
  5. Il-konsumatur jirċievi l-messaġġ u jibgħat konferma lis-sensar
  6. Is-sensar, malli jirċievi konferma, ineħħi kopja tal-messaġġ mill-kju. Imbagħad tħassar minn RAM u disk

CPR

proċess RPC (sejħa ta' proċedura remota) hija bbażata kważi l-interazzjonijiet kollha man-nukleu RabbitMQ. Per eżempju, diskussjonijiet inizjali dwar it-termini tal-klijent ma RabbitMQ, juri ċertu proċess RPC. Ladarba din is-sekwenza tkun kompluta, RabbitMQ se jkun lest li jaċċetta talbiet mill-klijent:

RabbitMQ. Parti 1. Introduzzjoni. Erlang, AMQP

Ukoll fl-ispeċifikazzjoni AMQP kemm il-klijent kif ukoll is-server jistgħu joħorġu kmandi. Dan ifisser li l-klijent qed jistenna li jikkomunika mas-server. Kmandi huma klassijiet u metodi. Pereżempju, Connection.Start – sejħa tal-metodu Start klassi Connection.

Konnessjoni u kanali

Għal tali skambju ta' informazzjoni bejn il-klijent u s-server, kanali. Il-kanali huma maħluqa fi ħdan konnessjoni speċifika. Kull kanal huwa iżolat minn kanali oħra. Fil-każ sinkroniku, mhuwiex possibbli li jiġi esegwit il-kmand li jmiss sakemm tiġi riċevuta tweġiba.

Sabiex tkun tista 'tibgħat kmandi b'mod parallel, trid tiftaħ diversi kanali. Kull kanal joħloq separat Erlang proċess. Konnessjoni waħda jista' jkollha kanali multipli (multiplexing). Għal kull kanal hemm ċerti strutturi u oġġetti fil-memorja. Għalhekk, aktar ma jkun hemm kanali fi ħdan konnessjoni, il- RabbitMQ juża aktar memorja biex jimmaniġġjaw tali konnessjoni.

RabbitMQ. Parti 1. Introduzzjoni. Erlang, AMQP

Eżempju sempliċi ta 'ħolqien ta' konnessjoni u kanal bl-użu RabbitMQ.Klijent:

// ...
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 
}

Il-ftuħ ta' konnessjoni ġdida għal kull operazzjoni huwa skoraġġut ħafna minħabba li dan se jwassal għal spejjeż għoljin. Il-kanali għandhom ikunu persistenti wkoll, iżda ħafna żbalji fil-protokoll iwasslu biex il-kanal jingħalaq, għalhekk il-ħajja tal-kanal tista 'tkun iqsar minn dik tal-konnessjoni.

Fejn jintuża RabbitMQ?

Fil-kuntest tal-mikroservizzi, il-protokoll AMQP u l-implimentazzjoni tagħha fi RabbitMQ spiss jintuża għal interazzjoni asinkronika bejn is-servizzi.

Fil-kuntest IIOT protokoll AMQP u l-implimentazzjoni tagħha fi RabbitMQ użat għall-iskambju tad-dejta bejn is-servers (server-server). Uża wkoll il-plugin MQTT Plugin RabbitMQ li hija implimentazzjoni tal-protokoll MQTT għat-trażmissjoni tad-dejta bejn is-sensur u s-server f’ambjenti ta’ veloċità baxxa u ta’ latenza għolja (lista sħiħa ta’ protokolli appoġġjati hija elenkata fuq websajt tal-proġett).

Fl-artiklu li jmiss se nibdew nifhmu l-Iskambji f'aktar dettall.

referenzi

Sors: www.habr.com

Żid kumment