Ievads: RabbitMQ visus ražotāju iesniegtos ziņojumus pieņem Exchange, kas pēc tam tos pārsūta uz Queue glabāšanai saskaņā ar konkrētu politiku RabbitMQ nodrošina četru veidu apmaiņu: fanout, tiešo, tēmu un galveni Galvenes režīms praksē tiek izmantots mazāk, un šajā rakstā ir salīdzināti tikai pirmie trīs režīmi.
1. Tiešā apmaiņa
Visi ziņojumi, kas nosūtīti uz Direct Exchange, tiek pārsūtīti uz rindu, kas norādīta RouteKey.
1. Kopumā jūs varat izmantot Biržu, kas nāk kopā ar rabbitMQ:" (Biržas nosaukums ir tukša virkne, turpmāk saukta par noklusējuma Biržu).
2. Šajā režīmā nav nepieciešams veikt nekādas saistošas darbības Exchange
3. Ziņojumapmaiņai ir nepieciešama "RouteKey", ko var vienkārši saprast kā sūtāmās rindas nosaukumu.
4. Ja rindas nosaukums, kas norādīts RouteKey, vhost nepastāv, ziņojums tiek nomests.
2. Fanout apmaiņa
Visi ziņojumi, kas nosūtīti uz Fanout Exchange, tiek pārsūtīti uz visām rindām, kas saistītas ar šo Exchange.
1. To var saprast kā maršrutēšanas tabulas modeli
2. Šim režīmam nav nepieciešama RouteKey
3. Šim režīmam ir nepieciešama Exchange saistīšana ar rindu iepriekš, viens Exchange var saistīt vairākas rindas, un viena rinda var būt saistīta ar vairākām biržām.
4. Ja Exchange, kas saņēma ziņojumu, nav saistīta ar nevienu rindu, ziņojums tiek atmests.
3. Tēmu apmaiņa
Visi ziņojumi, kas nosūtīti uz tēmu apmaiņu, tiek pārsūtīti uz visām rindām, kas rūpējas par tēmām, kas norādītas maršruta atslēgā
1. Šis modelis ir sarežģītāks, vienkārši sakot, katrai rindai ir sava tēma, visiem ziņojumiem ir "nosaukums" (RouteKey), un Exchange pārsūtīs ziņojumu visām rindām, kas var fuguely atbilst attiecīgās tēmas RouteKey.
2. Šim režīmam ir nepieciešams RouteKey, iespējams, iepriekš saistošs Exchange un Queue.
3. Saistot, norādiet rindai svarīgu tēmu, piemēram, "#.log.#", lai norādītu, ka rinda rūpējas par visiem ziņojumiem, kas saistīti ar žurnāliem (uz rindu tiks pārsūtīts ziņojums ar RouteKey "MQ.log.error").
4. "#" nozīmē 0 vai vairākus atslēgvārdus, un "" nozīmē vienu atslēgvārdu. Piemēram, "žurnāls". Tas var atbilst "log.warn", bet nevar atbilst "log.warn.timeout"; Bet "log.#" atbilst iepriekš minētajam.
5. Līdzīgi, ja Exchange neatrod rindu, kas atbilst RouteKey, tas izmetīs šo ziņojumu.
|