RabbitMQ. 1. rész Bevezetés. Erlang, AMQP

Jó napot, Habr! Szeretnék megosztani egy tankönyv-ismereti kézikönyvet, amit sikerült összegyűjtenem RabbitMQ és rövid ajánlásokba és következtetésekbe sűrítjük.

tartalomjegyzék

  • RabbitMQ. 1. rész Bevezetés. Erlang, AMQP és RPC
  • RabbitMQ. 2. rész: A cserék megértése
  • RabbitMQ. 3. rész: Várólisták és kötések megértése
  • RabbitMQ. 4. rész: Az üzenetek és keretek megértése
  • RabbitMQ. 5. rész: Üzenetkiadás és fogyasztási teljesítmény
  • RabbitMQ. 6. rész. Az összevonás és a lapát modulok áttekintése
  • RabbitMQ. 7. rész. Részletek a Connectionról és a Chanelről
  • RabbitMQ. 8. rész. RabbitMQ .NET-ben
  • RabbitMQ. 9. rész Monitoring

Röviden az AMQP-ről

Az AMQP (Advanced Message Queuing Protocol) egy nyílt protokoll az üzenetek rendszerösszetevők közötti továbbítására. Az alapötlet az, hogy az egyes alrendszerek (vagy független alkalmazások) tetszőleges módon tudnak üzeneteket cserélni egy AMQP-brókeren keresztül, amely útválasztást végez, esetleg kézbesítést garantál, adatfolyamokat oszt el, és előfizet a kívánt üzenettípusokra.

Jegyzőkönyv AMQP három fogalmat vezet be:

RabbitMQ. 1. rész Bevezetés. Erlang, AMQP

  • exchange (cserepont vagy csere) - üzeneteket küldenek rá. Valutaváltó üzenetet terjeszt egy vagy több sorban. Ő sorba irányítja az üzeneteket a létrehozott kapcsolatok alapján (binding) közte és a sor között
  • queue (queue) - olyan adatstruktúra a lemezen vagy a RAM-ban, amely üzenetekre mutató hivatkozásokat tárol, és másolatokat ad az üzenetekről consumers (fogyasztóknak)
  • binding (kötelező) - szabály, amely megmondja a cserepontnak, hogy ezeknek az üzeneteknek melyik sorba kell kerülniük

A protokoll felül fut TCP / IP.

Röviden Erlangról

A projekt forráskódja a következő címen található tárolóban található GitHub. Építészet RabbitMQ-szerver alapján Erlang és BEAM.

Erlang a cég fejlesztette ki Ericsson az 1980-as évek közepén elosztott, hibatűrő, valós idejű rendszerként 99,999%-os rendelkezésre állást igénylő alkalmazásokhoz. Erlang különféle iparágakban és modern alkalmazásokban használják, pl. WhatsApp. Bővebben a cikkben olvashat WhatsApp architektúra, amelyet a Facebook 19 milliárd dollárért vásárolt meg

Röviden a RabbitMQ-ról

Nyúl MQ egy nyílt forráskódú üzenetközvetítő. Az üzeneteket a protokoll összes alapelve mentén irányítja AMQP -ban leírva specifikációk. RabbitMQ végrehajtja és kiegészíti a protokollt AMQP.

Az üzenetküldési modell fő ötlete RabbitMQ dolog az producer (kiadó) nem küld üzeneteket közvetlenül a sorba. Valójában, és elég gyakran, a kiadó még azt sem tudja, hogy az üzenetet eljuttatják-e egyáltalán valamelyik sorba.

Ehelyett a kiadó csak üzeneteket küldhet a központnak. A központ egyrészt fogadja az üzeneteket a kiadóktól, másrészt sorokba küldi azokat. A központnak pontosan tudnia kell, mit kell tennie a kapott üzenettel. Hozzá kell adni egy adott sorhoz? Hozzá kell adni több sorhoz? Vagy figyelmen kívül kell hagyni az üzenetet.

RabbitMQ. 1. rész Bevezetés. Erlang, AMQP

Rövid munka RabbitMQ a következőképpen írható le:

  1. A kiadó üzenetet küld egy adott központnak
  2. Egy központ, miután megkapta az üzenetet, egy vagy több sorba irányítja azt a közte és a sor közötti kötelező szabályoknak megfelelően
  3. A várólista egy hivatkozást tárol erre az üzenetre. Maga az üzenet a RAM-ban vagy a lemezen van tárolva
  4. Amikor a fogyasztó készen áll arra, hogy üzenetet fogadjon a sorból, a szerver a hivatkozáson keresztül létrehozza az üzenet másolatát, és elküldi
  5. A fogyasztó megkapja az üzenetet és visszaigazolást küld a brókernek
  6. A bróker a visszaigazolást követően eltávolítja az üzenet másolatát a sorból. Ezután törli a RAM-ból és a lemezről

RPC

folyamat RPC (távoli eljáráshívás) szinte minden kölcsönhatás alapja a maggal RabbitMQ. Például kezdeti megbeszélések az ügyfél feltételeiről RabbitMQ, egy bizonyos folyamatot mutat be RPC. Ha ez a sorozat befejeződött, RabbitMQ készen áll az ügyféltől érkező kérések fogadására:

RabbitMQ. 1. rész Bevezetés. Erlang, AMQP

A specifikációban is AMQP a kliens és a szerver is kiadhat parancsokat. Ez azt jelenti, hogy az ügyfél arra vár, hogy kommunikáljon a szerverrel. A parancsok osztályok és metódusok. Például, Connection.Start – módszerhívás Start класса Connection.

Csatlakozás és csatornák

A kliens és a szerver közötti ilyen információcseréhez csatornák. A csatornák belül jönnek létre konkrét kapcsolat. Minden csatorna el van szigetelve a többi csatornától. Szinkron esetben a következő parancs végrehajtása nem lehetséges, amíg nem érkezik válasz.

Ahhoz, hogy párhuzamosan tudjon parancsokat küldeni, több csatornát kell megnyitnia. Minden csatorna külön csatornát hoz létre Erlang folyamat. Egy kapcsolatnak több csatornája is lehet (multiplexer). Minden csatornához vannak bizonyos struktúrák és objektumok a memóriában. Ezért minél több csatorna van egy kapcsolaton belül, az A RabbitMQ több memóriát használ egy ilyen kapcsolat kezeléséhez.

RabbitMQ. 1. rész Bevezetés. Erlang, AMQP

Egy egyszerű példa a kapcsolat és csatorna létrehozására 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 
}

Erősen nem ajánlott minden egyes művelethez új kapcsolatot nyitni magas költségekhez vezet. A csatornáknak is állandónak kell lenniük, de sok protokollhiba miatt a csatorna bezárul, így a csatorna élettartama rövidebb lehet, mint a kapcsolaté.

Hol használják a RabbitMQ-t?

A mikroszolgáltatások keretében a protokoll AMQP és végrehajtása ben RabbitMQ gyakran használják aszinkron interakció szolgáltatások között.

A kontextusban IIOT jegyzőkönyv AMQP és végrehajtása ben RabbitMQ szerverek közötti adatcserére használják (szerver-szerver). Használja a plugint is MQTT Plugin RabbitMQ amely a protokoll megvalósítása MQTT adatátvitelhez az érzékelő és a szerver között kis sebességű, nagy késleltetésű környezetekben (a támogatott protokollok teljes listája itt található projekt honlapja).

A következő cikkben elkezdjük részletesebben megérteni a cseréket.

referenciák

Forrás: will.com

Hozzászólás