RabbitMQ. Bahin 1. Pasiuna. Erlang, AMQP

Maayong hapon, Habr! Gusto nakong ipaambit ang usa ka libro nga pakisayran nga libro sa kahibalo nga akong nakolekta RabbitMQ ug mubu ngadto sa mugbo nga mga rekomendasyon ug mga konklusyon.

Mga sulud sa sulud

  • RabbitMQ. Bahin 1. Pasiuna. Erlang, AMQP ug RPC
  • RabbitMQ. Bahin 2. Pagsabot sa Pagbayloay
  • RabbitMQ. Bahin 3. Pagsabot sa mga Pila ug Pagbugkos
  • RabbitMQ. Bahin 4. Pagsabut unsa ang mga mensahe ug mga frame
  • RabbitMQ. Bahin 5: Pagmantala ug Pagkonsumo sa Pagganap sa Mensahe
  • RabbitMQ. Bahin 6. Kinatibuk-ang Pagtan-aw sa Federation ug Mga Module sa Pala
  • RabbitMQ. Bahin 7. Mga Detalye bahin sa Koneksyon ug Chanel
  • RabbitMQ. Bahin 8. RabbitMQ sa .NET
  • RabbitMQ. Bahin 9. Pagmonitor

Sa mubo bahin sa AMQP

Ang AMQP (Advanced Message Queuing Protocol) usa ka bukas nga protocol alang sa pagpasa sa mga mensahe tali sa mga sangkap sa sistema. Ang sukaranan nga ideya mao nga ang indibidwal nga mga subsystem (o independente nga mga aplikasyon) mahimong magbinayloay sa mga mensahe sa usa ka arbitraryong paagi pinaagi sa usa ka AMQP broker, nga nagpahigayon sa pagruta, posible nga garantiya sa pagpadala, pag-apod-apod sa mga sapa sa datos, ug pag-subscribe sa gusto nga mga tipo sa mensahe.

Protokol AMQP nagpaila sa tulo ka mga konsepto:

RabbitMQ. Bahin 1. Pasiuna. Erlang, AMQP

  • exchange (exchange point o exchange) - ang mga mensahe gipadala niini. Ibaylo nga punto nag-apod-apod sa mensahe sa usa o daghang pila. Siya rota sa mga mensahe ngadto sa usa ka pila base sa gibuhat nga mga link (binding) tali niya ug sa pila
  • queue (pila) - usa ka istruktura sa datos sa disk o sa RAM nga nagtipig og mga link sa mga mensahe ug naghatag og mga kopya sa mga mensahe consumers (sa mga konsumidor)
  • binding (nagbugkos) - usa ka lagda nga nagsulti sa exchange point kung asa nga pila kini nga mga mensahe moadto

Ang protocol nagdagan sa ibabaw TCP / IP.

Sa mubo bahin sa Erlang

Ang source code sa proyekto anaa sa repository sa GitHub. Arkitektura RabbitMQ-server base sa erlang ug BEAM.

Erlang gipalambo sa kompanya Ericsson sa tunga-tunga sa 1980s isip usa ka gipang-apod-apod, fault-tolerant, real-time nga sistema alang sa mga aplikasyon nga nagkinahanglan og 99,999% nga uptime. Erlang gigamit sa lain-laing mga industriya ug modernong mga aplikasyon, e.g. WhatsApp. Mahimo nimong mabasa ang dugang sa artikulo Ang arkitektura sa WhatsApp, nga gipalit sa Facebook sa kantidad nga $19 bilyon

Sa mubo bahin sa RabbitMQ

RabbitMQ mao ang usa ka open source nga mensahe broker. Gi-ruta niini ang mga mensahe sa tanan nga sukaranan nga mga prinsipyo sa protocol AMQP gihulagway sa mga detalye. RabbitMQ nagpatuman ug nagdugang sa protocol AMQP.

Ang panguna nga ideya sa modelo sa pagmemensahe sa RabbitMQ butang mao ang producer (magmantala) dili magpadala sa mga mensahe direkta sa pila. Sa tinuud, ug sa kasagaran, ang magmamantala wala gani mahibal-an kung ang mensahe ipadala sa bisan unsang pila.

Hinuon, ang magmamantala mahimo ra magpadala mga mensahe sa pagbinayloay. Sa usa ka bahin, ang pagbinayloay nakadawat mga mensahe gikan sa mga magmamantala, ug sa laing bahin, kini nagpadala kanila sa mga pila. Ang pagbinayloay kinahanglan mahibal-an kung unsa ang buhaton sa mensahe nga nadawat niini. Kinahanglan ba kini idugang sa usa ka piho nga pila? Kinahanglan ba kini idugang sa daghang mga pila? O ang mensahe kinahanglang ibaliwala.

RabbitMQ. Bahin 1. Pasiuna. Erlang, AMQP

Mubo nga trabaho RabbitMQ mahimong gihulagway sa mosunod:

  1. Ang magmamantala nagpadala ug mensahe sa usa ka espesipikong pagbinayloay
  2. Ang usa ka pagbinayloay, nga nakadawat usa ka mensahe, nag-ruta niini sa usa o daghan pa nga mga pila uyon sa mga nagbugkos nga mga lagda tali niini ug sa pila.
  3. Ang pila nagtipig usa ka pakisayran sa kini nga mensahe. Ang mensahe mismo gitipigan sa RAM o sa disk
  4. Kung ang konsumedor andam na nga makadawat usa ka mensahe gikan sa pila, ang server maghimo usa ka kopya sa mensahe pinaagi sa link ug ipadala
  5. Ang konsumidor nakadawat sa mensahe ug nagpadala sa kumpirmasyon sa broker
  6. Ang broker, sa dihang nakadawat og kumpirmasyon, nagtangtang sa kopya sa mensahe gikan sa pila. Unya tangtangon gikan sa RAM ug disk

CPR

proseso RPC (remote procedure call) nagpailalom sa halos tanang interaksyon sa nucleus RabbitMQ. Pananglitan, ang mga inisyal nga diskusyon bahin sa mga termino sa kliyente sa RabbitMQ, nagpakita sa usa ka piho nga proseso RPC. Kung nahuman na kini nga pagkasunod-sunod, RabbitMQ andam sa pagdawat sa mga hangyo gikan sa kliyente:

RabbitMQ. Bahin 1. Pasiuna. Erlang, AMQP

Usab sa espesipikasyon AMQP ang kliyente ug server mahimong mag-isyu ug mga mando. Kini nagpasabot nga ang kliyente naghulat sa pagpakigsulti sa server. Ang mga sugo kay mga klase ug pamaagi. Pananglitan, Connection.Start - tawag sa pamaagi Start grade Connection.

Koneksyon ug mga kanal

Alang sa ingon nga pagbinayloay sa kasayuran tali sa kliyente ug server, mga agianan. Ang mga channel gihimo sa sulod espesipikong koneksyon. Ang matag channel nahimulag gikan sa ubang mga channel. Sa dungan nga kaso, dili posible nga ipatuman ang sunod nga mando hangtod nga madawat ang tubag.

Aron makahimo sa pagpadala sa mga sugo nga managsama, kinahanglan nimo nga ablihan ang daghang mga channel. Ang matag channel nagmugna og bulag Erlang proseso. Ang usa ka koneksyon mahimong adunay daghang mga channel (multiplexing). Alang sa matag channel adunay piho nga mga istruktura ug mga butang sa memorya. Busa, ang mas daghang mga kanal adunay sulod sa usa ka koneksyon, ang Ang RabbitMQ naggamit og dugang nga memorya sa pagdumala sa ingon nga koneksyon.

RabbitMQ. Bahin 1. Pasiuna. Erlang, AMQP

Usa ka yano nga pananglitan sa paghimo og koneksyon ug paggamit sa channel RabbitMQ.Kliyente:

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

Ang pag-abli sa usa ka bag-ong koneksyon alang sa matag operasyon kusganong nawad-an sa kadasig sama niini mosangpot sa taas nga gasto. Ang mga channel kinahanglan usab nga magpadayon, apan daghang mga sayup sa protocol ang hinungdan sa pagsira sa channel, mao nga ang kinabuhi sa channel mahimong mas mubo kaysa sa koneksyon.

Asa gigamit ang RabbitMQ?

Sa konteksto sa microservices, ang protocol AMQP ug ang pagpatuman niini sa RabbitMQ sagad gigamit alang sa asynchronous nga interaksyon tali sa mga serbisyo.

Sa konteksto IIOT protokol AMQP ug ang pagpatuman niini sa RabbitMQ gigamit alang sa data exchange tali sa mga server (server-server). Gamita usab ang plugin MQTT Plugin RabbitMQ nga usa ka pagpatuman sa protocol MQTT alang sa pagpadala sa data tali sa sensor ug server sa ubos nga tulin, taas nga latency nga mga palibot (usa ka kompleto nga listahan sa gisuportahan nga mga protocol gilista sa website sa proyekto).

Sa sunod nga artikulo magsugod kita sa pagsabut sa mga Pagbinayloay sa mas detalyado.

mga pakisayran

Source: www.habr.com

Idugang sa usa ka comment