Įvadas: "RabbitMQ" visus gamintojų pateiktus pranešimus priima "Exchange", kuri juos persiunčia į "Queue" saugoti pagal konkrečią politiką RabbitMQ siūlo keturių tipų mainus: fanout, tiesioginį, temą ir antraštę Antraštės režimas praktiškai naudojamas mažiau, o šiame straipsnyje lyginami tik pirmieji trys režimai.
1. Tiesioginiai mainai
Visi pranešimai, siunčiami į Direct Exchange, persiunčiami į eilę, nurodytą RouteKey.
1. Apskritai, galite naudoti biržą, kuri pateikiama kartu su rabbitMQ:" (biržos pavadinimas yra tuščia eilutė, toliau vadinama numatytąja birža).
2. Šiuo režimu nereikia atlikti jokių įrišimo operacijų "Exchange"
3. Pranešimams reikalingas "RouteKey", kuris gali būti paprasčiausiai suprantamas kaip eilės, į kurią siunčiama, pavadinimas.
4. Jei "RouteKey" nurodyto eilės pavadinimo vhost nėra, pranešimas atmetamas.
2. Fanout mainai
Visi pranešimai, siunčiami į Fanout biržą, yra persiunčiami į visas eiles, susietas su ta birža.
1. Tai gali būti suprantama kaip maršruto lentelės modelis
2. Šiam režimui nereikia "RouteKey"
3. Šis režimas reikalauja iš anksto susieti "Exchange" su eile, viena "Exchange" gali susieti kelias eiles, o viena eilė gali būti susieta su keliomis biržomis.
4. Jei pranešimą gavusi birža nėra susieta su jokia eile, pranešimas nutraukiamas.
3. Temų mainai
Visi pranešimai, siunčiami į temų biržą, persiunčiami į visas eiles, kurioms rūpi RouteKey nurodytos temos
1. Šis modelis yra sudėtingesnis, paprasčiau tariant, kiekviena eilė turi savo susirūpinimą keliančią temą, visi pranešimai turi "pavadinimą" (RouteKey), o "Exchange" persiųs pranešimą visoms eilėms, kurios gali fuguely atitikti susirūpinimą keliančios temos RouteKey.
2. Šiam režimui reikalingas "RouteKey", galbūt iš anksto susiejantis "Exchange" ir "Queue".
3. Įrišdami pateikite eilei rūpimą temą, pvz., "#.log.#", kad nurodytumėte, kad eilėje rūpi visi pranešimai, susiję su žurnalais (į eilę bus persiųstas pranešimas su "MQ.log.error" maršruto raktu).
4. "#" reiškia 0 ar kelis raktinius žodžius, o "" reiškia vieną raktinį žodį. Pavyzdžiui, "žurnalas". Jis gali atitikti "log.warn", bet negali atitikti "log.warn.timeout"; Bet "log.#" atitinka aukščiau.
5. Panašiai, jei "Exchange" neras eilės, atitinkančios "RouteKey", šis pranešimas bus atmestas.
|