Üdvözlet, Habr! Szeretném megosztani egy tudás útmutató könyvet, amelyet sikerült összegyűjtenem RabbitMQ és összegezni rövid ajánlásokban és következtetésekben.
Tartalomjegyzék
- RabbitMQ. 1. rész. Bevezetés. Erlang, AMQP és RPC
- RabbitMQ. 2. rész. Az Exchanges részletezése
- RabbitMQ. 3. rész. Queues és Bindings megértése
- RabbitMQ. 4. rész. Mi a helyzet a üzenetekkel és keretekkel
- RabbitMQ. 5. rész. Az üzenetek közzétételi és fogyasztási teljesítménye
- RabbitMQ. 6. rész. A Federation és Shovel modulok áttekintése
- RabbitMQ. 7. rész. Részletesen a Kapcsolatról és csatornáról
- RabbitMQ. 8. rész. RabbitMQ .NET környezetben
- RabbitMQ. 9. rész. Monitoring
Röviden az AMQP-ról
Az AMQP (Advanced Message Queuing Protocol) egy nyílt protokoll az üzenetek rendszerkomponensek közötti továbbítására. A fő elképzelés az, hogy a különböző alrendszerek (vagy független alkalmazások) szabadon tudjanak üzeneteket cserélni egy AMQP brókeren keresztül, amely biztosítja az útválasztást, esetleg garantálja a kézbesítést, az adatfolyamok elosztását, és lehetőséget ad bizonyos típusú üzenetekre való feliratkozásra.
Protokoll AMQP három fogalmat vezet be:

exchange(cserehely) – ahová az üzeneteket küldik. A cserehely elosztja az üzenetet egy vagy több sorba. Ő irányítja az üzeneteket a sorba a létrehozott kapcsolatok (binding) alapján az ő és a sor közöttqueue(sor) – egy adatstruktúra, amely a lemezen vagy a memóriában tárolja az üzenetekre mutató hivatkozásokat, és átadja az üzenetek másolatait a fogyasztóknakconsumers(fogyasztóknak)binding(lekötés) – egy szabály, amely megjeleníti a cserehelynek, hogy ezek az üzenetek melyik sorba kerüljenek
A protokoll a .
rendszer tetején működik.
Röviden az Erlangról A projekt forráskódja a következő tárolóban található RabbitMQ-server és BEAM.
ErlangA rendszertEricssonfejlesztette ki az 1980-as évek közepén, mint egy elosztott, hibatűrő, valós idejű rendszert az alkalmazások számára, amelyek 99,999% megbízhatóságot igényelnek.ErlangKülönböző iparágakban és modern alkalmazásokban használják, például a
Röviden a RabbitMQ-ról
– egy nyílt forráskódú üzenetbróker, amely üzeneteket irányít az összes alapvető protokollel az alábbiakban leírt . RabbitMQ megvalósítja és kiegészíti a protokollt. AMQP.
Az üzenetváltás modelljének alapgondolata az, hogy RabbitMQ producer producer (a kiadó) nem küld közvetlen üzeneteket a sorba. Valójában gyakran a kiadó még csak azt sem tudja, hogy az üzenet egyáltalán el lesz-e juttatva valamilyen sorba.
Ehelyett a kiadó csak a cserére küldhet üzeneteket. Egyrészt a csere fogadja az üzeneteket a kiadóktól, másrészt pedig továbbítja azokat a sorokba. A cserének pontosan tudnia kell, mit kell tenni a megkapott üzenettel. Hozzá kell-e adni egy konkrét sorhoz? Hozzá kell-e adni több sorhoz? Vagy az üzenetet figyelmen kívül kell hagyni?

A munka röviden így leírható: RabbitMQ A kiadó üzenetet küld egy meghatározott cserére.
- A csere, miután megkapta az üzenetet, az üzenetet az általa és a sor között lévő kötési szabályok szerint egy vagy több sorba irányítja.
- A sor tárol egy hivatkozást erre az üzenetre. Magát az üzenetet memóriában vagy lemezen tárolják.
- Amint a fogyasztó készen áll arra, hogy az üzenetet a sorból megkapja, a szerver létrehoz egy másolatot az üzenetről a hivatkozás alapján, és elküldi.
- A fogyasztó megkapja az üzenetet, és visszaigazolást küld a brókernek.
- A bróker, miután megkapta a visszaigazolást, törli az üzenet másolatát a sorból. Ezután eltávolítja a memóriából és a lemezről.
- RPC (távoli eljárás-hívás)
RPC
Folyamat . Például a kliens feltételeinek kezdeti megbeszélése RabbitMQ, bemutat egy adott folyamatot. RabbitMQ. Amint ez a sorozat befejeződik, RPCkész lesz kérdések fogadására a klienstől: RabbitMQ A specifikációban is

a kliens és a szerver parancsokat hívhatnak meg. Ez azt jelenti, hogy a kliens várja a szerverrel való kölcsönhatást. A parancsok osztályok és metódusok. Például, AMQP Connection.Start – metódus hívása. Start osztályának kapcsolat és csatornák Connection.
Az ilyen információcsere során a kliens és a szerver között
csatornákat használnak. A csatornák egy adott kapcsolaton belül jönnek létre.. Minden csatorna izolált a többi csatornától. A szinkron esetén nem lehet a következő parancsot végrehajtani, amíg nem érkezett válasz. Annak érdekében, hogy lehetővé váljon a parancsok párhuzamos küldése, több csatornát kell megnyitni. Minden csatorna különfolyamatot hoz létre. Egy kapcsolatnak több csatornája lehet (
multiplexing Erlang multiplexing). Minden csatornához léteznek bizonyos struktúrák és objektumok a memóriában. Tehát minél több csatorna van egy kapcsolat keretein belül, annál több memóriát használ a RabbitMQ ennek a kapcsolatnak a kezelésére.

Egyszerű példa a kapcsolat és csatorna létrehozására a :
// ...
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
}Minden egyes művelethez új kapcsolat nyitása nem ajánlott, mivel ez nagy költségeket eredményezne.A csatornáknak is állandónak kell lenniük, de sok protokollhibából adódóan a csatornát le kell zárni, így a csatorna élettartama rövidebb lehet, mint a kapcsolaté.
Hol használják a RabbitMQ-t?
A mikroszolgáltatások kontextusában a protokollt AMQP és annak megvalósítását RabbitMQ gyakran használják aszinkron interakcióra a szolgáltatások között.
A kontextusban IIOT protokoll AMQP és annak megvalósítását RabbitMQ az adatok cseréjére használják szerverek között (szerver-szerver). Emellett használják a ami a protokoll megvalósítása adatok továbbítására érzékelő és szerver között alacsony sebességű, magas késleltetésű környezetekben (a támogatott protokollok teljes listáját megtalálja a ).
A következő cikkben részletesebben tárgyaljuk az Exchanges-t.
Hivatkozások
Forrás: habr.com
