RabbitMQ. Beş 2. Têgihîştina Danûstendinan

Exchange - veguherîner an xala danûstendinê. Peyam jê re tên şandin. Exchange peyamê belav dike di yek an çend rêzan de. Ew rêgezên mesajên ji bo dorê li ser bingeha girêdanên çêkirî (bindings) di navbera wê û dorê de.

Exchange nabe pêvajoya Erlang. Ji ber sedemên mezinbûnê exchange di databasa çêkirî de rêzek e (girêdana modulê bi koda ku mantiqa rêvekirinê lê ye) ye. mnesia. 1 hezar veguherîner dê tenê 1 MB bîranînê bixwin.

Table of Contents

Exchange Direct

Direct exchange - dema ku hewce bike tê bikaranîn peyamek ji rêzikên taybetî re bişînin. Peyam bi taybetmendiyek ji veguherîner re tê weşandin mifteya rêvekirinê û dikeve nav hemî rêzikên ku bi vê veguhezerê re bi mifteyek rêvekirinê ya wekhev ve girêdayî ne. Mifteya rêvekirinê rêzek e. Lihevkirin bi kar tê kirin kontrolkirina rêzikên ji bo wekheviyê.

Nûneriya grafîkî ya herikîna peyamê:

RabbitMQ. Beş 2. Têgihîştina Danûstendinan

В rabbitmq têgehek heye veguherînerê xwerû. ev direct exchange bê nav. Ger guhezkara xwerû were bikar anîn, wê hingê dê peyam berbi rêzek bi navek wekhev ve were rêve kirin mifteya rêvekirina peyamê.

Guhertina Mijara

Topic exchange - wekhev direct exchange bi berawirdkirina mifteya rêvekirinê rêça bijartî dike. Lê, di vê rewşê de, kilît tê dayîn bi şablonê. Dema ku şablonek çêbikin, bikar bînin 0 an jî bêtir peyvan (herf AZ и az û hejmaran 0-9), bi xalek, û hem jî bi sembolan veqetandî * и #.

  • * - dikare bi tam li şûna 1 gotina
  • # - dikare bi şûna 0 an jî bêtir peyvan

Nûneriya grafîkî ya herikîna peyamê:

RabbitMQ. Beş 2. Têgihîştina Danûstendinan

Ji versiyonê dest pê dike RabbitMQ 2.4.0 algorîtmaya rêvekirinê ji bo topic exchange dest bi xebatê kir heta 145 caran zûtir. Bi pêkanîna nêzîkatiyê ev yek bi dest xistin pêkanîna ceribandinê, ku tê wateya temsîlkirina şablonan wekî avahiyek darê. Ji bo nimûne şablonan a.b.c, a.*.b.c, a.#.c и b.b.c dê bi avahiyek jêrîn were temsîl kirin:

RabbitMQ. Beş 2. Têgihîştina Danûstendinan

Lihevhatina nimûneyê ji kok dest pê dike û ji serî ber bi jêr ve tê lêgerîn.

Features:

  • bikaranîna vê veguherîner dikare bibe hilbijartinek baş e ji bo pêşkeftina sepana pêşerojê ya gengaz, ji ber şablon her gav dikarin bêne xweş kirin da ku peyam bi heman rengî were weşandin direct exchange an fanout exchange
  • şablonên ku bikar tînin * pir zûtirji şablonên ku bikar tînin #.
  • topic exchange hêdîtir direct exchange

Fanout Exchange

Fanout exchange - hemî peyam ji hemî rêzan re têne şandin tevî ku di peyamê de mifteyek rêvekirinê were diyar kirin.

Features:

  • RabbitMQ bi bişkok û şablonan rêvekirinê naxebite ku bandorek erênî li ser performansê dike. Ev zûtirîn e exchange;
  • Pêdivî ye ku hemî xerîdar karibin hemî peyaman pêvajoyê bikin;

Nûneriya grafîkî ya herikîna peyamê:

RabbitMQ. Beş 2. Têgihîştina Danûstendinan

Headers Exchange

Headers exchange - li ser bingeha berhevdana cotên taybetmendiyên (kilît, nirx) peyaman rê dide rêzên têkildar headers taybetmendiya peyamê girêdan û wekhev. headers ye Dictionary<ключ, значение>.

Ger hûn kilîtek taybetî li ferhengê zêde bikin x-match bi wate any, wê gavê heke lihevhatinek qismî ya (kilît, nirx) cotan hebe, peyam tê rêkirin. Ev tevger dişibe operatorê or.

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

Bişkojka xwerû x-match nirxek dihewîne all. Ev tê vê wateyê ku dema ku cotên (kilît, nirx) bi tevahî li hev bikin, peyam tê rêve kirin. Ev tevger mîna operatorê ye and.

Nûneriya grafîkî ya herikîna peyamê:

RabbitMQ. Beş 2. Têgihîştina Danûstendinan

Features:

  • nermbûna zêde
  • sermaya hejmartinê ya zêde. Hemî cotên (key, nirx) taybetmendiyê headers Berî ku nirxên rêveçûna peyamê were hesibandin divê li gorî navê mifteyê were rêz kirin. Ji cureyên din ên danûstendinê hêdîtir.

Berhevkar Hashing Exchange

Ev veguherîner e girêdan и ne ava kirin в RabbitMQ.

Consistent-hashing exchange (hevguhertina hevgirtî) - dema ku gelek rêz hene ku wergirên potansiyel ên peyamê ne û gava ku hûn hewce ne ku hevsengiyê di navbera wan de bar bikin tê bikar anîn. Peyam ji hêla giraniyê ve bi rêzê ve girêdayî ye (nirxek rêzika şertî ji 0 - n).

Giraniya hevwate ya rêzan - destnîşan dike ku her rêz dê wergire li ser heman mîqdarê peyaman (her peyam dê tenê di yek rêzê de were danîn). Garantiyek bêkêmasî ya belavkirina yekgirtî ya peyaman tune.

Nûneriya grafîkî ya herikîna peyamê:

RabbitMQ. Beş 2. Têgihîştina Danûstendinan

Hash li ser bingeha mifteya rêvekirinê an taybetmendiyê tê hesibandin headers messages. Ger hemî peyamên hatine weşandin bişkojkên rêvekirinê yên cûda hebûn, an headers, wê demê belavkirin dê bi giraniyê pêk were. Wekî din, mifteya rêwîtiyê dê were bikar anîn an headers.

Pêdivî ye ku gava ku pêdivî ye ku berbi xerîdar ji çareseriyek bi pir xerîdarên ku heman rêzê bikar tînin bilindtir bibe alîkar.

Kombînasyona veguherîneran (E2E)

Tevgera hemî danûstendinan bi karanîna ragihandinê dikare were hev kirin Exchange-to-Exchange (tevlihevkirina pevguherkaran di nav taybetmendiyê de tune AMQP. Ev dirêjkirina protokolê ji aliyekî ve ye RabbitMQ).

Nûneriya grafîkî ya herikîna peyamê:

RabbitMQ. Beş 2. Têgihîştina Danûstendinan

Li ser hesabê E2E em dikarin veavakirina berbelavkirî ya rast ku hem hewcedariyên heyî û hem jî yên mezinbûyî pêk tîne bibînin.

Danûstandinek çêbikin

Veguhezkar bi karanîna hevdemek tête çêkirin RPC daxwaza pêşkêşkarê. Daxwaz bi karanîna rêbazê tête kirin Exchange.Declare, bi pîvanan tê gotin:

  • navê veguherîner
  • type exchanger
  • vebijarkên din

Mînaka afirandinê exchange bi arîkariya RabbitMQ.Client:

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

  • exchange - Navê veguherînerê ku em dixwazin biafirînin. Nav divê yekta be
  • type - type of exchanger
  • durable - heke were saz kirin true, paşê exchange dê mayînde be. Ew ê li ser dîskê were hilanîn û dê bikaribe ji nûve destpêkirina server / broker sax bimîne. Ger nirx false, paşê exchange demkî ye û dema ku server/broker ji nû ve were destpêkirin dê were rakirin
  • autoDelete - jêbirina otomatîk. Exchange dê were jêbirin dema ku hemî rêzikên ku pê re têkildar têne jêbirin
  • arguments argumanên vebijarkî ne. Pir caran, bi argumanên set alternative exchange (veguherîner alternatîf). Ger peyamek nikaribe di riya orîjînal re derbas bibe, ew dikare ji danûstendinek alternatîf re were şandin ku li ser rêyek cûda were rêve kirin.

RabbitMQ. Beş 2. Têgihîştina Danûstendinan

Ger afirandin exchange dibe, wê hingê server dê xerîdar hemdemek bişîne RPC bersîva Exchange.DeclareOk. Ger afirandin nabe (li ser daxwazê ​​red bû Exchange.Declare), wê hingê kanal dê bigire server fermanek asynkron bikar tîne Channel.Close û xerîdar dê îstîsnayek bistîne OperationInterruptedException, ku dê koda xeletiyê û danasîna wê hebe.

Berî şandinê divê veguherînerek were afirandin. Ger hûn peyamek ji hin guhezkerek neheyî re diweşînin - RabbitMQ bêdeng jê rake.

GUI-ya Exchange biafirînin

Biçe panela rêveberiyê RabbitMQ bin bikarhêner guest (navê bikarhêner: guest û şîfre: guest). Ji kerema xwe not bikin ku bikarhêner guest tenê dikare ji localhost ve girêdayî ye. Niha em herin tabê Exchanges û li ser bitikîne Add a new exchange. Taybetmendiyan dagirin:

RabbitMQ. Beş 2. Têgihîştina Danûstendinan

Piraniya taybetmendiyên li jor hatine diyar kirin. Li vir em destnîşan dikin ku heke em destnîşan bikin Internal, hingê veguherandin tenê dikare ji bo bikar bînin E2E. Producer dê nikaribin ji danûstendinek weha re peyaman bişînin.

encamê

Dema ku pergalek pêşve dibe, danasîna topolojiyê hêsan e rêkirin grafikek bi kar tînin. Lê berî ku hûn dest bi çêkirina grafikekê bikin, hêja ye ku rêyên bi seyrûsefera zêde ronî bikin, ji ber wan hewce dike hilbera bilind (birêvebirinî). Piştre, hûn dikarin trafîkê dabeş bikin. Û paşê dest bi avakirina.

Ger di grafiya çêkirî de hebe set dawî bişkokên rêvekirinê, wê hingê, hêja ye ku li çend kesan bigerin fanout exchange, ku 1:1 bi mifteya rêvekirinê ve girêdayî ne. Bîr bînin bîra xwe fanout exchange ya herî bilez.

Ger hejmara rêyên ber bi bêdawîtiyê ve meyla dike, hêjayî balê ye topic exchange an jî, heke şablon ne hewce ye, wê hingê hûn dikarin hilbijêrin direct exchnge, ji ber ew zûtir e topic exchange.

Kombînasyona cûrbecûr exchange divê ji we re bibe alîkar ku hûn yê rast bibînin. veavakirina scalable, ku hem hewcedariyên pergalê yên heyî û hem jî yên mezin pêk tîne.

Hejmara exchange û rêz divê li gorî hejmara rêgezan hindik be.

Di gotara din de, em ê dest pê bikin ku di derheqê Queues û Bindings de bêtir fêm bikin.

references

Source: www.habr.com

Add a comment