RabbitMQ. Pati 1. Entwodiksyon. Erlang, AMQP

Bon apremidi, Habr! Mwen vle pataje yon liv referans-liv konesans ke mwen jere kolekte sou RabbitMQ ak kondanse nan rekòmandasyon kout ak konklizyon.

Table of Contents

  • RabbitMQ. Pati 1. Entwodiksyon. Erlang, AMQP ak RPC
  • RabbitMQ. Pati 2. Konprann Echanj yo
  • RabbitMQ. Pati 3. Konprann ke moun kap kriye ak Liaisons
  • RabbitMQ. Pati 4. Konprann ki mesaj ak ankadreman yo ye
  • RabbitMQ. Pati 5: Piblikasyon Mesaj ak Pèfòmans Konsomasyon
  • RabbitMQ. Pati 6. Revizyon modil Federasyon an ak Pèl
  • RabbitMQ. Pati 7. Detay sou Koneksyon ak Chanel
  • RabbitMQ. Pati 8. RabbitMQ nan .NET
  • RabbitMQ. Pati 9. Siveyans

Yon ti tan sou AMQP

AMQP (Advanced Message Queuing Protocol) se yon pwotokòl louvri pou transmèt mesaj ant eleman sistèm yo. Lide debaz la se ke subsystems endividyèl (oswa aplikasyon endepandan) ka echanj mesaj nan yon fason abitrè atravè yon koutye AMQP, ki fè routage, pètèt garanti livrezon, distribye kouran done, ak abònman nan kalite mesaj yo vle.

Pwotokòl AMQP prezante twa konsèp:

RabbitMQ. Pati 1. Entwodiksyon. Erlang, AMQP

  • exchange (pwen echanj oswa echanj) - mesaj yo voye ba li. Echanj pwen distribye mesaj nan youn oswa plis ke moun kap kriye. Li wout mesaj yo nan yon keu baze sou koneksyon yo kreye (binding) ant li menm ak keu la
  • queue (keu) - yon estrikti done sou disk oswa nan RAM sa estoke lyen ki mennen nan mesaj epi li bay kopi mesaj yo consumers (pou konsomatè)
  • binding (obligatwa) - yon règ ki di pwen echanj la nan ki keu mesaj sa yo ta dwe antre

Pwotokòl la kouri sou tèt Tchp / IP.

Yon ti tan sou Erlang

Kòd sous pwojè a se nan depo a nan GitHub. Achitekti RabbitMQ-sèvè baze sou erlang ak BEAM.

Erlang devlope pa konpayi an Ericsson nan mitan ane 1980 yo kòm yon distribiye, toleran fay, sistèm an tan reyèl pou aplikasyon ki mande 99,999% disponiblite. Erlang itilize nan divès endistri ak aplikasyon modèn, pa egzanp. WhatsApp. Ou ka li plis nan atik la WhatsApp achitekti, ki Facebook te achte pou $19 milya dola

Yon ti tan sou RabbitMQ

Lapen MQ se yon koutye mesaj sous louvri. Li voye mesaj yo sou tout prensip debaz pwotokòl la AMQP ki dekri nan espesifikasyon. RabbitMQ aplike ak konplete pwotokòl la AMQP.

Lide prensipal la nan modèl la messagerie nan RabbitMQ bagay se producer (piblikatè) pa voye mesaj dirèkteman nan keu la. An reyalite, e byen souvan, piblikatè a pa menm konnen si mesaj la pral delivre nan nenpòt keu ditou.

Olye de sa, Piblikatè a ka sèlman voye mesaj nan echanj la. Sou yon bò, echanj la resevwa mesaj nan men piblikatè, epi sou lòt men an, li voye yo nan ke moun kap kriye. Echanj la dwe konnen egzakteman kisa pou l fè ak mesaj li resevwa a. Èske li ta dwe ajoute nan yon keu espesifik? Èske li ta dwe ajoute nan plizyè ke moun kap kriye? Oswa mesaj la ta dwe inyore.

RabbitMQ. Pati 1. Entwodiksyon. Erlang, AMQP

Travay kout RabbitMQ ka dekri jan sa a:

  1. Piblikatè a voye yon mesaj nan yon echanj espesifik
  2. Yon echanj, li te resevwa yon mesaj, wout li nan youn oswa plizyè keu an akò ak règ obligatwa ki genyen ant li ak nat la.
  3. Nat la estoke yon referans a mesaj sa a. Se mesaj la li menm ki estoke nan RAM oswa sou disk
  4. Yon fwa konsomatè a pare pou resevwa yon mesaj nan keu a, sèvè a kreye yon kopi mesaj la atravè lyen an epi li voye
  5. Konsomatè a resevwa mesaj la epi li voye konfimasyon bay koutye a
  6. Koutye a, lè li resevwa konfimasyon, retire yon kopi mesaj la nan keu a. Lè sa a, efase soti nan RAM ak disk

kp

pwosesis RPC (rele pwosedi adistans) kache prèske tout entèraksyon ak nwayo a RabbitMQ. Pou egzanp, premye diskisyon sou kondisyon kliyan an ak RabbitMQ, demontre yon sèten pwosesis RPC. Yon fwa sekans sa a fini, RabbitMQ pral pare pou aksepte demann nan men kliyan an:

RabbitMQ. Pati 1. Entwodiksyon. Erlang, AMQP

Epitou nan spesifikasyon la AMQP tou de kliyan an ak sèvè ka bay kòmandman. Sa vle di ke kliyan an ap tann pou kominike ak sèvè a. Kòmandman yo se klas ak metòd. Pa egzanp, Connection.Start - metòd apèl Start klas Connection.

Koneksyon ak chanèl

Pou echanj enfòmasyon sa yo ant kliyan ak sèvè, chanèl. Chanèl yo kreye andedan koneksyon espesifik. Chak chanèl izole de lòt chanèl. Nan ka synchrone a, li pa posib pou egzekite pwochen kòmandman an jiskaske yo resevwa yon repons.

Pou kapab voye kòmandman an paralèl, ou dwe louvri plizyè chanèl. Chak chanèl kreye yon separe Erlang pwosesis. Yon koneksyon ka gen plizyè chanèl (multiplexage). Pou chak chanèl gen sèten estrikti ak objè nan memwa. Se poutèt sa, plis chanèl gen nan yon koneksyon, la RabbitMQ itilize plis memwa pou jere yon koneksyon konsa.

RabbitMQ. Pati 1. Entwodiksyon. Erlang, AMQP

Yon egzanp senp pou kreye yon koneksyon ak chanèl lè l sèvi avèk RabbitMQ.Kliyan:

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

Ouvèti yon nouvo koneksyon pou chak operasyon yo fòtman dekouraje kòm sa a ap mennen nan gwo depans yo. Chanèl yo ta dwe tou pèsistan, men anpil erè pwotokòl lakòz kanal la fèmen, kidonk lavi kanal la ka pi kout pase sa ki nan koneksyon an.

Ki kote yo itilize RabbitMQ?

Nan kontèks microservices, pwotokòl la AMQP ak aplikasyon li nan RabbitMQ souvan itilize pou entèraksyon asynchrone ant sèvis yo.

Nan kontèks la IIOT pwotokòl AMQP ak aplikasyon li nan RabbitMQ itilize pou echanj done ant sèvè (sèvè-sèvè). Sèvi ak plugin a tou MQTT Plugin RabbitMQ ki se yon aplikasyon pwotokòl la MQTT pou transmèt done ant Capteur ak sèvè nan anviwònman ki ba vitès ak gwo latansi (yon lis konplè pwotokòl sipòte yo nan sit entènèt pwojè).

Nan pwochen atik la nou pral kòmanse konprann Echanj yo an plis detay.

Referans

Sous: www.habr.com

Add nouvo kòmantè