RabbitMQ. Bahin 2. Pagsabot sa Pagbayloay

Exchange - exchanger o exchange point. Ang mga mensahe gipadala niini. Exchange nag-apod-apod sa mensahe sa usa o daghang pila. Siya rota sa mga mensahe ngadto sa usa ka pila base sa gibuhat nga mga link (bindings) taliwala niini ug sa pila.

Exchange dili Erlang proseso. Alang sa mga hinungdan sa scalability exchange usa ka hilo (link sa module nga adunay code diin nahimutang ang routing logic) sa built-in nga database mnesia. Ang 1 ka libo nga mga exchangers mogamit lamang sa 1MB nga memorya.

Mga sulud sa sulud

  • RabbitMQ. Bahin 1. Pasiuna. Erlang, AMQP ug RPC
  • RabbitMQ. Bahin 2. Pagsabot sa Pagbayloay
  • RabbitMQ. Bahin 3. Pagsabot sa mga Pila ug Pagbugkos
  • RabbitMQ. Bahin 4. Pag-atubang sa unsa ang mga mensahe ug mga bayanan
  • RabbitMQ. Bahin 5: Pagmantala ug Pagkonsumo sa Pagganap sa Mensahe
  • RabbitMQ. Bahin 6. Kinatibuk-ang Pagtan-aw sa Federation ug Mga Module sa Pala
  • RabbitMQ. Bahin 7. Mga Detalye bahin sa Koneksyon ug Chanel
  • RabbitMQ. Bahin 8. RabbitMQ sa .NET
  • RabbitMQ. Bahin 9. Pagmonitor

Direktang Pagbayloay

Direct exchange - gigamit kung gikinahanglan paghatud ug mensahe sa piho nga mga pila. Ang mensahe gimantala ngadto sa exchanger uban sa usa ka piho nga routing key ug mosulod sa tanang mga pila nga nalangkit niini nga exchanger nga adunay susama nga routing key. Ang routing key kay usa ka string. Ang pagpares gihimo gamit pagsusi sa mga kuwerdas alang sa pagkaparehas.

Ang graphical nga representasyon sa dagan sa mensahe:

RabbitMQ. Bahin 2. Pagsabot sa Pagbayloay

В rabbitmq adunay usa ka konsepto default exchanger. Kini direct exchange walay pangalan. Kung gigamit ang default exchanger, ang mensahe madala sa pila nga adunay ngalan nga parehas sa yawe sa pag-ruta sa mensahe.

Pagbayloay sa Hilisgutan

Topic exchange – susama direct exchange makapahimo sa pinili nga routing pinaagi sa pagtandi sa routing key. Apan, sa niini nga kaso, ang yawe gihatag pinaagi sa template. Sa paghimo og template, gamita 0 o daghang mga pulong (mga letra AZ и az ug mga numero 0-9), gibulag sa usa ka tulbok, ingon man mga simbolo * и #.

  • * - mahimong pulihan sa eksakto 1 ang pulong
  • # - mahimong pulihan sa 0 o dugang nga mga pulong

Ang graphical nga representasyon sa dagan sa mensahe:

RabbitMQ. Bahin 2. Pagsabot sa Pagbayloay

Pagsugod sa bersyon RabbitMQ 2.4.0 routing algorithm alang sa topic exchange nagsugod sa pagtrabaho hangtod 145 mga panahon nga mas paspas. Nakab-ot nila kini pinaagi sa pagpatuman sa pamaagi pagsulay sa pagpatuman, nga nagpasabot sa representasyon sa mga templates isip istruktura sa kahoy. Pananglitan mga templates a.b.c, a.*.b.c, a.#.c и b.b.c irepresentar sa mosunod nga istruktura:

RabbitMQ. Bahin 2. Pagsabot sa Pagbayloay

Ang pagpares sa pattern gipangita sugod sa gamut ug gikan sa taas hangtod sa ubos.

Features:

  • ang paggamit niini nga exchanger mahimong usa ka maayong pagpili alang sa posible nga pag-uswag sa umaabot nga app, kay Ang mga templates mahimong ipasibo kanunay aron ang mensahe mamantala nga parehas direct exchange o fanout exchange
  • mga templates nga gigamit * labi ka tulinkay sa mga templates nga gigamit #.
  • topic exchange hinay direct exchange

Pagbinayloay sa Fanout

Fanout exchange - ang tanan nga mga mensahe gihatag sa tanan nga mga pila bisan kung ang usa ka routing key gipiho sa mensahe.

Features:

  • RabbitMQ dili molihok sa mga yawe sa ruta ug mga template nga adunay positibo nga epekto sa pasundayag. Kini ang labing paspas exchange;
  • ang tanan nga mga konsumedor kinahanglan nga makahimo sa pagproseso sa tanan nga mga mensahe;

Ang graphical nga representasyon sa dagan sa mensahe:

RabbitMQ. Bahin 2. Pagsabot sa Pagbayloay

Pagbaylo sa mga ulohan

Headers exchange - nagdirekta sa mga mensahe ngadto sa may kalabutan nga mga pila base sa pagtandi sa mga pares sa (key, value) nga mga kabtangan headers nagbugkos ug susama nga kabtangan sa mensahe. headers mao ang usa ka Dictionary<ключ, значение>.

Kung magdugang ka usa ka espesyal nga yawe sa diksyonaryo x-match uban sa kahulogan any, dayon ang mensahe madala kung ang mga pares (key, value) partially match. Kini nga kinaiya susama sa operator or.

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

Default nga yawe x-match adunay usa ka bili all. Kini nagpasabot nga ang mensahe madala kung ang mga pares (key, value) hingpit nga magkatugma. Kini nga kinaiya susama sa operator and.

Ang graphical nga representasyon sa dagan sa mensahe:

RabbitMQ. Bahin 2. Pagsabot sa Pagbayloay

Features:

  • dugang nga pagka-flexible
  • dugang nga computational overhead. Tanang pares (key, value) sa attribute headers kinahanglan ihan-ay sa yawe nga ngalan sa dili pa kwentahon ang mga kantidad sa pag-ruta sa mensahe. Mas hinay kay sa ubang mga matang sa pagbaylo.

Kanunay nga Hashing Exchange

Kini nga exchanger mao ang plugin и dili built in в RabbitMQ.

Consistent-hashing exchange (hash-consistent exchange) - gigamit kung adunay daghang mga pila nga potensyal nga makadawat sa usa ka mensahe ug kung kinahanglan nimo nga i-load ang balanse tali kanila. Ang mensahe nalangkit sa pila pinaagi sa gibug-aton (usa ka conditional string value gikan sa 0 - n).

Katumbas nga gibug-aton sa mga pila - nagpakita nga ang matag pila makadawat mahitungod sa samang kantidad mga mensahe (matag mensahe ibutang sa usa lang ka pila). Walay kompletong garantiya sa uniporme nga pag-apod-apod sa mga mensahe.

Ang graphical nga representasyon sa dagan sa mensahe:

RabbitMQ. Bahin 2. Pagsabot sa Pagbayloay

Hash gikuwenta base sa routing key o property headers mga mensahe. Kung ang tanan nga gipatik nga mga mensahe adunay lainlaing mga yawe sa ruta, o headers, unya ang pag-apod-apod mahitabo pinaagi sa gibug-aton. Kay kon dili, ang routing key ang gamiton, o headers.

Kinahanglan nga makatabang kung ang pagkonsumo sa mga konsumedor kinahanglan nga motubo nga mas taas kaysa usa ka solusyon nga adunay daghang mga konsumedor nga naggamit sa parehas nga pila.

Kombinasyon sa mga exchanger (E2E)

Ang pamatasan sa tanan nga mga tigbaylo mahimong mahiusa gamit ang komunikasyon Pagbaylo-sa-pagbaylo (Ang kombinasyon sa mga exchanger wala gilakip sa espesipikasyon AMQP. Kini usa ka extension sa protocol gikan sa kilid RabbitMQ).

Ang graphical nga representasyon sa dagan sa mensahe:

RabbitMQ. Bahin 2. Pagsabot sa Pagbayloay

Sa gasto sa E2E makit-an nato ang husto nga scalable configuration nga makatubag sa kasamtangan ug nagtubo nga mga kinahanglanon.

Paghimo og Exchange

Ang exchanger gihimo gamit ang usa ka synchronous RPC hangyo sa server. Ang hangyo gihimo gamit ang pamaagi Exchange.Declare, gitawag nga adunay mga parameter:

  • ngalan sa exchanger
  • tipo sa exchanger
  • ubang mga kapilian

Pananglitan sa paglalang exchange sa panabang RabbitMQ.Kliyente:

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

  • exchange - ang ngalan sa exchanger nga gusto namong buhaton. Ang ngalan kinahanglan nga talagsaon
  • type - matang sa exchanger
  • durable - kung gi-install true, dayon exchange mahimong permanente. Kini tipigan sa disk ug mahimong mabuhi sa usa ka server/broker restart. Kung ang bili false, dayon exchange temporaryo ug tangtangon kung ang server/broker gi-restart
  • autoDelete - awtomatik nga pagtangtang. Exchange mapapas kung ang tanan nga kaubang pila matangtang
  • arguments mga opsyonal nga argumento. Kasagaran, pinaagi sa mga argumento nga gitakda alternative exchange (alternatibo nga exchanger). Kung ang usa ka mensahe dili makaagi sa orihinal nga ruta, mahimo kini ipadala sa usa ka alternatibo nga pagbinayloay aron madala sa lahi nga agianan.

RabbitMQ. Bahin 2. Pagsabot sa Pagbayloay

Kon paglalang exchange lagmit, unya ang server magpadala sa kliyente og usa ka synchronous RPC tubag Exchange.DeclareOk. Kon paglalang dili mahimo (adunay pagdumili sa hangyo Exchange.Declare) unya ang channel mosira server gamit ang usa ka asynchronous nga sugo Channel.Close ug ang kliyente makakuha og eksepsiyon OperationInterruptedException, nga adunay sulod nga error code ug ang paghulagway niini.

Kinahanglan nga maghimo usa ka exchanger sa dili pa i-post. Kung magmantala ka usa ka mensahe sa pipila nga wala naglungtad nga exchanger - RabbitMQ kuhaa kini sa hilom.

Paghimo ug Exchange GUI

Adto sa admin panel RabbitMQ ubos sa user guest (username: guest ug password: guest). Palihug timan-i nga ang user guest mahimo ra magkonektar gikan sa localhost. Karon adto ta sa tab Exchanges ug i-klik ang Add a new exchange. Pun-a ang mga kabtangan:

RabbitMQ. Bahin 2. Pagsabot sa Pagbayloay

Kadaghanan sa mga kabtangan nga gihulagway sa ibabaw. Dinhi atong timan-an nga kon atong ibutang Internal, unya ang pagbaylo magamit lamang alang sa E2E. Producer dili makapadala og mga mensahe sa ingon nga pagbinayloay.

konklusyon

Kung nagpalambo sa usa ka sistema, dali nga ihulagway ang topology pagruta gamit ang graph. Apan sa dili ka pa magsugod sa paghimo og usa ka graph, angay nga ipasiugda ang mga agianan nga adunay taas nga trapiko, tungod kay. gikinahanglan nila mas taas nga throughput (performance). Sunod, mahimo nimong klasipikasyon ang trapiko. Ug unya magsugod sa pagtukod.

Kung naa sa gitukod nga graph kinutuban nga set routing yawe, unya, kini mao ang bili sa pagtan-aw ngadto sa pipila fanout exchange, nga 1:1 nga may kalabutan sa routing key. Hinumdomi kana fanout exchange ang pinakapaspas.

Kung ang gidaghanon sa mga rota hilig sa infinity, angay nga hatagan ug pagtagad topic exchange o, kung dili kinahanglan ang template, mahimo ka makapili direct exchnge, kay mas paspas siya topic exchange.

Mga kombinasyon sa lainlaing exchange kinahanglan makatabang kanimo sa pagpangita sa husto. scalable nga configuration, nga nagtagbo sa kasamtangan ug nagtubo nga mga kinahanglanon sa sistema.

Gidaghanon sa exchange ug ang mga pila kinahanglan gamay ra kung itandi sa gidaghanon sa mga ruta.

Sa sunod nga artikulo, magsugod kita sa pagsabot og dugang mahitungod sa Queues and Bindings.

mga pakisayran

Source: www.habr.com

Idugang sa usa ka comment