RabbitMQ. Beş 1. Destpêk. Erlang, AMQP

Roj baş, Habr! Ez dixwazim pirtûkek dersê-referansê ya zanyariyê ya ku min li ser berhev kiriye parve bikim RabbitMQ û di pêşniyar û encamên kurt de berhev bikin.

Table of Contents

  • RabbitMQ. Beş 1. Destpêk. Erlang, AMQP û RPC
  • RabbitMQ. Beş 2. Têgihîştina Danûstendinan
  • RabbitMQ. Beş 3. Têgihîştina rêz û girêdanan
  • RabbitMQ. Beş 4. Fêmkirina peyam û çarçove çi ne
  • RabbitMQ. Beş 5: Performansa şandin û vexwarina peyaman
  • RabbitMQ. Beş 6. Pêşniyara Federasyona û Modulên Shovel
  • RabbitMQ. Beş 7. Agahiyên li ser Girêdana û Chanel
  • RabbitMQ. Beş 8. RabbitMQ li .NET
  • RabbitMQ. Beş 9. Şopandin

Bi kurtî li ser AMQP

AMQP (Protokola Pêşveçûyî ya Peyamê) protokolek vekirî ye ji bo veguheztina peyaman di navbera pêkhateyên pergalê de. Fikra bingehîn ev e ku bine-pergalên kesane (an serîlêdanên serbixwe) dikarin bi rengek kêfî bi navgînek AMQP-ê ve, ku rêvekirinê pêk tîne, belkî radestkirinê garantî dike, herikên daneyan belav dike, û bi celebên peyamên xwestî re dibe abone.

Protokol AMQP sê têgehan destnîşan dike:

RabbitMQ. Beş 1. Destpêk. Erlang, AMQP

  • exchange (xala danûstendinê an danûstendinê) - peyam jê re têne şandin. Xala danûstandinê peyamê belav dike di yek an çend rêzan de. Wê rêgezên mesajên ji bo dorê li ser bingeha girêdanên çêkirî (binding) di navbera wî û dorê de
  • queue (doz) - avahiyek daneyê li ser dîskê an di RAM-ê de ku lînkên peyaman diparêze û kopiyên peyaman dide consumers (ji xerîdaran re)
  • binding (girêdan) - qaîdeyek ku ji xala danûstendinê re dibêje ku divê ev peyam têkevin kîjan rêzê

Protokol li jor dimeşe TCP / IP.

Bi kurtî li ser Erlang

Koda çavkaniyê ya projeyê di depoyê de ye GitHub. Avakarî RabbitMQ-server çi qewimî erlang û BEAM.

Erlang ji hêla pargîdaniyê ve hatî pêşve xistin Ericsson di nîvê salên 1980-an de ji bo serîlêdanên ku ji% 99,999-ê wextê hewce dike, pergala belavkirî, xelet-tolerans, di wextê rast de. Erlang di pîşesaziyên cihêreng û sepanên nûjen de têne bikar anîn, mînakî. WhatsApp. Hûn dikarin di gotarê de bêtir bixwînin Mîmariya WhatsAppê, ku Facebook bi 19 mîlyar dolarî kirî

Bi kurtî li ser RabbitMQ

Rabbit MQ brokerek peyamek çavkaniyek vekirî ye. Ew peyaman li ser hemî prensîbên bingehîn ên protokolê rêve dike AMQP tê şirove kirin taybetmendiyên. RabbitMQ protokolê pêk tîne û temam dike AMQP.

Fikra sereke ya modela mesajê tê de RabbitMQ tişt e producer (weşanger) rasterast peyaman naşîne dorê. Di rastiyê de, û pir caran, weşanger jî nizane gelo dê peyam bi tevahî li rêzek were radest kirin.

Di şûna wê de, weşanger tenê dikare ji danûstendinê re peyaman bişîne. Danûstandin ji aliyekî ve ji weşanxaneyan peyaman distîne, li aliyê din jî wan dişîne dorê. Divê danûstendin bi rastî bizanibe ku bi peyama ku distîne çi bike. Ma divê ew li rêzek taybetî were zêdekirin? Ma divê ew li çend rêzan were zêdekirin? An jî divê peyam bê paşguh kirin.

RabbitMQ. Beş 1. Destpêk. Erlang, AMQP

Xebata kurt RabbitMQ dikare wiha were binavkirin:

  1. Weşanxane ji danûstendinek taybetî re peyamek dişîne
  2. Danûstandinek, piştî ku peyamek wergirtiye, li gorî qaîdeyên girêdanê yên di navbera wê û dorê de wê berbi yek an çend rêzan ve dişîne.
  3. Di dorê de referansek vê peyamê diparêze. Peyam bixwe di RAM an li ser dîskê de tê hilanîn
  4. Gava ku xerîdar amade ye ku peyamek ji rêzê werbigire, server bi riya girêdanê kopiyek peyamê diafirîne û dişîne.
  5. Xerîdar peyamê distîne û erêkirinê ji brokerê re dişîne
  6. Broker, piştî wergirtina pejirandinê, kopiyek peyamê ji rêzê derdixe. Dûv re ji RAM û dîskê jê dibe

RPC

pêvajoya RPC (banga prosedûra dûr) hema hema hemî danûstendinên bi navokê re bingeh digire RabbitMQ. Mînakî, nîqaşên destpêkê yên li ser şertên xerîdar bi RabbitMQ, pêvajoyek diyar nîşan dide RPC. Dema ku ev rêzik temam bû, RabbitMQ dê amade be ku daxwazên xerîdar qebûl bike:

RabbitMQ. Beş 1. Destpêk. Erlang, AMQP

Her weha di taybetmendiyê de AMQP hem xerîdar û hem jî server dikarin fermanan derxînin. Ev tê vê wateyê ku xerîdar li benda danûstandina bi serverê ye. Ferman ders û rêbaz in. Bo nimûne, Connection.Start - banga rêbazê Start çîn Connection.

Girêdan û kanalên

Ji bo danûstendina agahdariya wusa di navbera xerîdar û serverê de, kanalên. Kanal di hundurê de têne çêkirin girêdana taybetî. Her kanalek ji kanalên din veqetandî ye. Di rewşa hevdemî de, heya ku bersivek neyê wergirtin ne gengaz e ku emrê din were bicîh kirin.

Ji bo ku hûn bikaribin fermanan bi paralel bişînin, divê hûn çend kanalan vekin. Her kanalek cuda diafirîne Erlang doz. Yek girêdan dikare çend kanalan hebe (multiplexing). Ji bo her kanalek di bîranînê de hin avahî û tişt hene. Ji ber vê yekê, çend kanalên ku di hundurê pêwendiyê de hene, ew RabbitMQ bêtir bîranîn bikar tîne ji bo birêvebirina girêdanek weha.

RabbitMQ. Beş 1. Destpêk. Erlang, AMQP

Nimûneyek hêsan a çêkirina pêwendiyek û kanalek bikar anîn 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 
}

Ji ber vê yekê vekirina pêwendiyek nû ji bo her operasyonê bi tundî nayê cesaret kirin dê bibe sedema lêçûnên bilind. Divê kanal jî domdar bin, lê gelek xeletiyên protokolê dibin sedema girtina kanalê, ji ber vê yekê jîyana kanalê ji ya pêwendiyê kurttir dibe.

RabbitMQ li ku tê bikar anîn?

Di çarçoveya mîkroxizmetan de, protokol AMQP û pêkanîna wê li RabbitMQ gelek caran ji bo bikaranîn têkiliya asynchronous di navbera xizmetên.

Di çarçoveya IIOT protokol AMQP û pêkanîna wê li RabbitMQ ji bo danûstandina daneyan di navbera pêşkêşkeran de (server-server) tê bikar anîn. Di heman demê de pêvekê bikar bînin MQTT Plugin RabbitMQ ku pêkanîna protokolê ye MQTT ji bo veguheztina daneyan di navbera senzor û serverê de li hawîrdorên kêm-leza, derengmayînek bilind (lîsteyek tevahî ya protokolên piştgirî têne navnîş kirin malpera projeyê).

Di gotara din de em ê dest pê bikin ku bi hûrgulî danûstandinan fam bikin.

references

Source: www.habr.com

Add a comment