RabbitMQ. 2. zatia. Trukeak ulertzea

Exchange - trukagailua edo truke-puntua. Mezuak bidaltzen zaizkio. Exchange mezua banatzen du ilara batean edo gehiagotan. Berak mezuak ilara batera bideratzen ditu sortutako esteketan oinarrituta (bindings) haren eta ilararen artean.

Exchange ez da Erlang prozesua. Eskalagarritasun arrazoiengatik exchange kate bat da (bideratze-logika dagoen kodea duen modulurako esteka) txertatutako datu-basean mnesia. 1 trukagailuek 1 MB baino ez dute memoria kontsumituko.

Edukien taula

  • RabbitMQ. 1. zatia. Sarrera. Erlang, AMQP eta RPC
  • RabbitMQ. 2. zatia. Trukeak ulertzea
  • RabbitMQ. 3. zatia. Ilarak eta loturak ulertzea
  • RabbitMQ. 4. zatia. Mezuak eta markoak zer diren jorratzea
  • RabbitMQ. 5. zatia: Mezuen errendimendua argitaratzea eta kontsumitzea
  • RabbitMQ. 6. zatia. Federazioaren eta Pala moduluen ikuspegi orokorra
  • RabbitMQ. 7. zatia. Connection eta Chanel-ari buruzko xehetasunak
  • RabbitMQ. 8. zatia. RabbitMQ .NET-en
  • RabbitMQ. 9. zatia. Jarraipena

Truke zuzena

Direct exchange - Beharrezkoa denean erabiltzen da bidali mezu bat ilara zehatzetara. Mezua trukatzaileari argitaratzen zaio zehatz batekin bideratze-gakoa eta trukagailu honekin erlazionatuta dauden ilara guztietan sartzen da antzeko bideratze-gako batekin. Bideratze-gakoa kate bat da. Lotura erabiliz egiten da kateak berdintasuna egiaztatzea.

Mezu-fluxuaren irudikapen grafikoa:

RabbitMQ. 2. zatia. Trukeak ulertzea

В rabbitmq kontzeptu bat dago trukagailu lehenetsia. It direct exchange izenik ez. Trukagailu lehenetsia erabiltzen bada, mezua izen berdina duen ilara batera bideratuko da mezuak bideratzeko gakoa.

Gai-trukea

Topic exchange – antzekoa direct exchange bideratze selektiboa ahalbidetzen du bideratze-gakoa alderatuz. Baina, kasu honetan, gakoa ematen da txantiloiaren arabera. Txantiloi bat sortzean, erabili 0 edo hitz gehiago (letrak AZ и az eta zenbakiak 0-9), puntu batez bereizita, baita ikurrak ere * и #.

  • * - Zehazki ordezkatu daiteke 1 hitza
  • # - ordezkatu daiteke 0 edo hitz gehiago

Mezu-fluxuaren irudikapen grafikoa:

RabbitMQ. 2. zatia. Trukeak ulertzea

Bertsiotik hasita RabbitMQ 2.4.0 bideratze algoritmoa topic exchange arte hasi zen lanean 145 aldiz azkarrago. Planteamendua ezarriz lortu zuten saiatu inplementazioa, eta horrek txantiloiak zuhaitz-egitura gisa irudikatzea suposatzen du. Adibidez txantiloiak a.b.c, a.*.b.c, a.#.c и b.b.c honako egitura honen bidez irudikatuko da:

RabbitMQ. 2. zatia. Trukeak ulertzea

Ereduen bat etortzea errotik hasi eta goitik behera bilatzen da.

Ezaugarriak:

  • trukagailu honen erabilera bihur daiteke aukera ona etorkizuneko aplikazioak garatzeko, zeren txantiloiak beti pertsonaliza daitezke mezua antzera argitaratu dadin direct exchange edo fanout exchange
  • erabiltzen dituzten txantiloiak * askoz azkarragoerabiltzen dituzten txantiloiak baino #.
  • topic exchange motelago direct exchange

Fanout Trukea

Fanout exchange - mezu guztiak ilara guztietara bidaltzen dira mezuan bideratze-gako bat zehaztu arren.

Ezaugarriak:

  • RabbitMQ ez du funtzionatzen bideratze-gakoekin eta txantiloiekin errendimenduan eragin positiboa duena. Hau da azkarrena exchange;
  • kontsumitzaile guztiek mezu guztiak prozesatzeko gai izan behar dute;

Mezu-fluxuaren irudikapen grafikoa:

RabbitMQ. 2. zatia. Trukeak ulertzea

Goiburuen trukea

Headers exchange - Mezuak erlazionatutako ilaretara zuzentzen ditu (gakoa, balioa) propietateen pareen konparazioan oinarrituta headers loteslea eta antzeko mezuen propietatea. headers da Dictionary<ключ, значение>.

Hiztegiari gako berezi bat gehitzen badiozu x-match esanahiarekin any, orduan mezua bideratzen da bikoteak (gakoa, balioa) partzialki bat egiten badute. Portaera hau operadorearen antzekoa da or.

var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");

Lehenetsitako gakoa x-match balio bat dauka all. Horrek esan nahi du mezua bideratzen dela bikoteak (gakoa, balioa) guztiz bat datozenean. Portaera hau operadorearen antzekoa da and.

Mezu-fluxuaren irudikapen grafikoa:

RabbitMQ. 2. zatia. Trukeak ulertzea

Ezaugarriak:

  • malgutasun gehigarria
  • gainkostu konputazional gehigarria. Atributuaren bikote guztiak (gakoa, balioa). headers gako-izenaren arabera ordenatu behar da mezuen bideratze-balioak kalkulatu aurretik. Beste truke mota batzuk baino motelago.

Hashing truke koherentea

Trukagailu hau da plugina и barneratu gabe в RabbitMQ.

Consistent-hashing exchange (truke hashing koherentearekin) - mezu baten hartzaile potentzialak diren ilara anitz daudenean eta haien arteko karga orekatu behar duzunean erabiltzen da. Mezua ilararekin lotuta dago pisuaren arabera (baldintzazko kate-balioa 0 - n).

Ilaren pisu baliokidea - ilara bakoitzak jasoko duela adierazten du kopuru bera gutxi gorabehera mezuak (mezu bakoitza ilara bakarrean jarriko da). Ez dago mezuen banaketa uniformearen berme osoa.

Mezu-fluxuaren irudikapen grafikoa:

RabbitMQ. 2. zatia. Trukeak ulertzea

Hash bideratze-gako edo jabetzan oinarrituta kalkulatua headers mezuak. Argitaratutako mezu guztiek bideratze-gako desberdinak badituzte, edo headers, orduan banaketa pisuaren arabera gertatuko da. Bestela, bideratze-gakoa erabiliko da, edo headers.

Kontsumitzaileen errendimendua ilara bera erabiltzen duten hainbat kontsumitzaile dituen soluzio batek baino handiagoa izan behar duenean lagundu beharko luke.

Trukagailuen konbinazioa (E2E)

Trukagailu guztien portaera komunikazioa erabiliz konbina daiteke Truke-truke (trukagailuen konbinazioa ez dago zehaztapenean sartzen AMQP. Hau protokoloaren luzapena da albotik RabbitMQ).

Mezu-fluxuaren irudikapen grafikoa:

RabbitMQ. 2. zatia. Trukeak ulertzea

Ren kontura E2E egungo eta hazten ari diren baldintzak betetzen dituen konfigurazio eskalagarri egokia aurki dezakegu.

Sortu Truke bat

Trukagailua sinkrono bat erabiliz sortzen da RPC zerbitzariari eskaera. Eskaera metodoa erabiliz egiten da Exchange.Declare, parametroekin deitua:

  • trukagailuaren izena
  • trukagailu mota
  • beste aukera batzuk

Sorkuntza adibidea exchange laguntzarekin RabbitMQ.Bezeroa:

//...
channel.ExchangeDeclare(
    exchange: "my_exchange",
    type: "direct",
    durable: "false",
    autoDelete: "false",
    arguments: null
);
//...

  • exchange - sortu nahi dugun trukagailuaren izena. Izena bakarra izan behar da
  • type - trukagailu mota
  • durable - instalatuta badago trueondoren exchange iraunkorra izango da. Diskoan gordeko da eta zerbitzari/artekarien berrabiarazteko gai izango da. Balioa bada falseondoren exchange aldi baterakoa da eta zerbitzaria/artekaria berrabiarazten denean kenduko da
  • autoDelete - ezabatze automatikoa. Exchange lotutako ilara guztiak ezabatzen direnean ezabatu egingo da
  • arguments aukerako argumentuak dira. Gehienetan, jarritako argudioen bidez alternative exchange (trukagailu alternatiboa). Mezu bat ezin bada jatorrizko bidetik igaro, ordezko truke batera bidal daiteke beste bide batetik bideratzeko.

RabbitMQ. 2. zatia. Trukeak ulertzea

Sorkuntza bada exchange agian, orduan zerbitzariak bezeroari sinkrono bat bidaliko dio RPC ответ Exchange.DeclareOk. Sorkuntza bada ezinezkoa da (eskaerari ezezkoa eman zitzaion Exchange.Declare) orduan kanala itxiko da zerbitzaria komando asinkrono bat erabiliz Channel.Close eta bezeroak salbuespen bat jasoko du OperationInterruptedException, errore-kodea eta bere deskribapena jasoko dituena.

Bidali aurretik trukagailu bat sortu behar da. Mezu bat argitaratzen baduzu existitzen ez den trukatzaile bati - RabbitMQ isilik kendu.

Sortu Exchange GUI bat

Joan administrazio panelera RabbitMQ erabiltzaile azpian guest (erabiltzaile izena: guest eta pasahitza: guest). Kontuan izan erabiltzaileak guest Localhost-etik bakarrik konekta daiteke. Orain goazen fitxara Exchanges eta egin klik Add a new exchange. Bete propietateak:

RabbitMQ. 2. zatia. Trukeak ulertzea

Propietate gehienak goian deskribatu dira. Hemen ezartzen badugu Internal, orduan trukea soilik erabil daiteke E2E. Producer ezingo du horrelako truke batera mezurik bidali.

Ondorioa

Sistema bat garatzerakoan, komenigarria da topologia deskribatzea bideratzea grafiko bat erabiliz. Baina grafiko bat eraikitzen hasi baino lehen, komeni da trafiko handiko bideak nabarmentzea, zeren. eskatzen dute errendimendu handiagoa (performancea). Ondoren, trafikoa sailka dezakezu. Eta gero hasi eraikitzen.

Eraikitako grafikoan badago multzo finitua bideratze-gakoak, beraz, merezi du hainbatetara begiratzea fanout exchange, bideratze-gakoarekin erlazionatuta dauden 1:1. Gogoratu fanout exchange azkarrena.

Ibilbide kopurua bada infiniturako joera du, merezi du arreta jartzea topic exchange edo, txantiloia behar ez bada, orduan aukeratu dezakezu direct exchnge, zeren azkarragoa da topic exchange.

Askotariko konbinazioak exchange egokia aurkitzen lagunduko dizu. konfigurazio eskalagarria, egungo eta gero eta handiagoa den sistemaren eskakizunak betetzen dituena.

Zenbakia exchange eta ilarak minimoak izan behar dira ibilbide kopuruarekin alderatuta.

Hurrengo artikuluan, Ilarak eta Loturei buruz gehiago ulertzen hasiko gara.

Erreferentziak

Iturria: www.habr.com

Gehitu iruzkin berria