Sissejuhatus: RabbitMQ-s aktsepteerib Exchange kõik tootjate saadetud sõnumid, mis seejärel suunavad need Queue'sse salvestamiseks vastavalt kindlale poliitikale RabbitMQ pakub nelja tüüpi vahetusi: fanout, otsene, teema ja päis Päisrežiimi kasutatakse praktikas vähem ning see artikkel võrdleb ainult esimesi kolme režiimi.
1. Otsene vahetus
Kõik Direct Exchange'ile saadetud sõnumid suunatakse RouteKey's määratud järjekorda.
1. Üldiselt saad kasutada Exchange'i, mis tuleb koos rabbitMQ:" (Exchange'i nimi on tühi string, edaspidi vaikimisi Exchange).
2. Selles režiimis ei ole vaja Exchange'il sidumistoiminguid teha
3. Sõnumite saatmiseks on vaja "RouteKey", mida saab lihtsalt mõista kui järjekorra nime, kuhu saadetakse.
4. Kui RouteKey's määratud järjekorra nimi vhostis ei eksisteeri, eemaldatakse sõnum.
2. Fännivahetus
Kõik sõnumid, mis saadetakse Fanout Exchange'ile, suunatakse kõigile selle vahetusega seotud järjekordadele.
1. Seda võib mõista kui marsruutimistabeli mustrit
2. See režiim ei nõua RouteKey'd
3. See režiim nõuab vahetuse ja järjekorra eelnevalt sidumist, üks vahetus võib siduda mitu järjekorda ja üks järjekord saab olla seotud mitme vahetusega.
4. Kui sõnumi vastu võtnud vahetus ei ole seotud ühegi järjekorraga, katkestatakse sõnum.
3. Teemavahetus
Kõik Teemavahetusele saadetud sõnumid suunatakse edasi kõigile järjekordadele, mis hoolivad RouteKey's määratud teemadest
1. See muster on lihtsamalt öeldes keerukam, igal järjekorral on oma murekoht, kõigil sõnumitel on "pealkiri" (RouteKey) ning Exchange edastab sõnumi kõigile järjekordadele, mis võivad ebamääraselt vastata teema RouteKey'le.
2. See režiim nõuab RouteKey'd, võib-olla sidudes Exchange'i ja Queue'd ette.
3. Sidumisel lisa teema, mis järjekorda korda läheb, näiteks "#.log.#", mis näitab, et järjekord hoolib kõigist logidega seotud sõnumitest (sõnum RouteKey'ga "MQ.log.error" edastatakse järjekorda).
4. "#" tähendab 0 või mitut märksõna ja "" tähendab ühte märksõna. Näiteks "logi". See võib sobitada "log.warn", kuid ei saa sobitada "log.warn.timeout"; Aga "log.#" vastab eelnevale.
5. Samamoodi, kui Exchange ei leia järjekorda, mis vastaks RouteKey'le, jätab ta selle teate.
|