RabbitMQ. Část 1. Úvod. Erlang, AMQP

Dobré odpoledne, Habr! Chci se podělit o učebnici-referenční knihu znalostí, které se mi podařilo nasbírat RabbitMQ a zhustit do krátkých doporučení a závěrů.

obsah

  • RabbitMQ. Část 1. Úvod. Erlang, AMQP a RPC
  • RabbitMQ. Část 2. Pochopení výměn
  • RabbitMQ. Část 3. Pochopení front a vazeb
  • RabbitMQ. Část 4. Pochopení toho, co jsou zprávy a rámce
  • RabbitMQ. Část 5: Publikování a konzumace zpráv
  • RabbitMQ. Část 6. Přehled modulů Federation a Shovel
  • RabbitMQ. Část 7. Podrobnosti o Connection a Chanel
  • RabbitMQ. Část 8. RabbitMQ v .NET
  • RabbitMQ. Část 9. Monitorování

Krátce o AMQP

AMQP (Advanced Message Queuing Protocol) je otevřený protokol pro přenos zpráv mezi komponentami systému. Základní myšlenkou je, že jednotlivé subsystémy (nebo nezávislé aplikace) si mohou vyměňovat zprávy libovolným způsobem prostřednictvím zprostředkovatele AMQP, který provádí směrování, případně garantuje doručení, distribuuje datové toky a odebírá požadované typy zpráv.

Protokol AMQP uvádí tři koncepty:

RabbitMQ. Část 1. Úvod. Erlang, AMQP

  • exchange (výměnné místo nebo ústředna) - jsou na něj odesílány zprávy. Směnárna distribuuje zprávu v jedné nebo více frontách. Ona směruje zprávy do fronty na základě vytvořených odkazů (binding) mezi ním a frontou
  • queue (fronta) - datová struktura na disku nebo v RAM, která ukládá odkazy na zprávy a poskytuje kopie zpráv consumers (pro spotřebitele)
  • binding (vazba) – pravidlo, že říká výměnnému bodu, do které fronty by tyto zprávy měly jít

Protokol běží nahoře TCP / IP.

Krátce o Erlangu

Zdrojový kód projektu je v úložišti na adrese GitHub. Architektura RabbitMQ server na základě Erlang a BEAM.

Erlang vyvinuté společností Ericsson v polovině 1980. let jako distribuovaný systém v reálném čase odolný proti chybám pro aplikace vyžadující 99,999 % provozuschopnosti. Erlang používá se v různých průmyslových odvětvích a moderních aplikacích, např. WhatsApp. Více si můžete přečíst v článku Architektura WhatsApp, kterou Facebook koupil za 19 miliard dolarů

Krátce o RabbitMQ

RabbitMQ je open source zprostředkovatel zpráv. Směruje zprávy podle všech základních principů protokolu AMQP popsané v Specifikace. RabbitMQ implementuje a doplňuje protokol AMQP.

Hlavní myšlenka modelu zasílání zpráv v RabbitMQ věc je producer (vydavatel) neposílá zprávy přímo do fronty. Vlastně a dost často vydavatel ani neví, jestli bude zpráva vůbec doručena do nějaké fronty.

Místo toho může vydavatel odesílat zprávy pouze na burzu. Na jedné straně ústředna přijímá zprávy od vydavatelů a na druhé straně je posílá do front. Burza musí přesně vědět, co dělat se zprávou, kterou obdrží. Má být přidán do konkrétní fronty? Má být přidán do více front? Nebo by měla být zpráva ignorována.

RabbitMQ. Část 1. Úvod. Erlang, AMQP

Krátká práce RabbitMQ lze popsat následovně:

  1. Vydavatel odešle zprávu na konkrétní burzu
  2. Ústředna, která přijala zprávu, ji směruje do jedné nebo více front v souladu se závaznými pravidly mezi ní a frontou
  3. Ve frontě je uložen odkaz na tuto zprávu. Samotná zpráva je uložena v paměti RAM nebo na disku
  4. Jakmile je spotřebitel připraven přijmout zprávu z fronty, server vytvoří kopii zprávy prostřednictvím odkazu a odešle
  5. Spotřebitel obdrží zprávu a zašle potvrzení zprostředkovateli
  6. Broker po obdržení potvrzení odstraní kopii zprávy z fronty. Poté smaže z RAM a disku

RPC

Proces RPC (vzdálené volání procedury) je základem téměř všech interakcí s jádrem RabbitMQ. Například počáteční diskuse o podmínkách klienta s RabbitMQ, demonstruje určitý proces RPC. Jakmile je tato sekvence dokončena, RabbitMQ bude připraven přijímat požadavky od klienta:

RabbitMQ. Část 1. Úvod. Erlang, AMQP

I ve specifikaci AMQP klient i server mohou vydávat příkazy. To znamená, že klient čeká na komunikaci se serverem. Příkazy jsou třídy a metody. Například, Connection.Start – volání metody Start třída Connection.

Připojení a kanály

Pro takovou výměnu informací mezi klientem a serverem kanály. Kanály jsou vytvořeny uvnitř konkrétní spojení. Každý kanál je izolován od ostatních kanálů. V synchronním případě není možné provést další příkaz, dokud není přijata odpověď.

Abyste mohli posílat příkazy paralelně, musíte otevřít několik kanálů. Každý kanál vytváří samostatný Erlang proces. Jedno připojení může mít více kanálů (multiplexování). Pro každý kanál jsou v paměti určité struktury a objekty. Proto čím více kanálů je v rámci připojení, tím více kanálů je v rámci připojení RabbitMQ využívá více paměti spravovat takové připojení.

RabbitMQ. Část 1. Úvod. Erlang, AMQP

Jednoduchý příklad vytvoření spojení a použití kanálu 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 
}

Důrazně se nedoporučuje otevření nového připojení pro každou operaci povede k vysokým nákladům. Kanály by také měly být trvalé, ale mnoho chyb protokolu způsobuje uzavření kanálu, takže životnost kanálu může být kratší než životnost připojení.

Kde se RabbitMQ používá?

V kontextu mikroslužeb protokol AMQP a jeho implementace v RabbitMQ často používané pro asynchronní interakce mezi službami.

V kontextu IIOT protokol AMQP a jeho implementace v RabbitMQ slouží k výměně dat mezi servery (server-server). Použijte také plugin Plugin MQTT RabbitMQ což je implementace protokolu MQTT pro přenos dat mezi senzorem a serverem v prostředí s nízkou rychlostí a vysokou latencí (úplný seznam podporovaných protokolů je uveden na projektové místo).

V dalším článku začneme Exchangem rozumět podrobněji.

reference

Zdroj: www.habr.com

Přidat komentář