Johdanto: RabbitMQ:ssa kaikki tuottajien lähettämät viestit hyväksytään Exchangen toimesta, joka sitten välittää ne jonoon tallennettavaksi tietyn käytännön mukaisesti RabbitMQ tarjoaa neljä tyyppiä vaihtoja: fanout, suora, aihe ja otsikko Otsikkotilaa käytetään käytännössä vähemmän, ja tässä artikkelissa verrataan vain ensimmäisiä kolmea tilaa.
1. Suora vaihto
Kaikki Direct Exchangeen lähetetyt viestit ohjataan RouteKeyn määrittelemään jonoon.
1. Yleisesti ottaen voit käyttää rabbitMQ:n mukana tulevaa Exchange:" (Pörssin nimi on tyhjä merkkijono, jota kutsutaan tästä eteenpäin oletus-Exchangeksi).
2. Tässä tilassa ei ole tarvetta tehdä mitään binding -toimintoja Exchangeen
3. Viestittelyyn tarvitaan "RouteKey", joka voidaan yksinkertaisesti ymmärtää jonon nimenä, johon lähetetään.
4. Jos RouteKeyssä annettu jonon nimi ei ole vhostissa, viesti poistetaan.
2. Fanout-vaihto
Kaikki viestit, jotka lähetetään Fanout-pörssiin, välitetään kaikille kyseiseen vaihtoon sidotuille jonoille.
1. Se voidaan ymmärtää reititystaulukon kaavana
2. Tämä tila ei vaadi Route-avainta
3. Tämä tila vaatii Exchangen sitomista jonoon etukäteen, yksi Exchange voi sitoa useita Jonoja ja yksi Queue voidaan sitoa useampaan Exchangeen.
4. Jos viestin vastaanottanut pörssi ei ole sidottu mihinkään jonoon, viesti poistetaan.
3. Aiheiden vaihto
Kaikki viestit, jotka lähetetään Topic Exchangeen, välitetään kaikille jonoille, jotka välittävät RouteKeyssä määritellyistä aiheista
1. Tämä malli on yksinkertaisesti monimutkaisempi, jokaisella jonolla on oma huolenaiheensa, kaikilla viesteillä on "otsikko" (RouteKey), ja Exchange välittää viestin kaikille jonoille, jotka voivat epämääräisesti vastata aiheen RouteKeytä.
2. Tämä tila vaatii RouteKeyn, mahdollisesti Exchange- ja Queue-sitomisen etukäteen.
3. Sidottaessa anna aihe, josta jonoa kiinnostaa, kuten "#.log.#", joka osoittaa, että jono välittää kaikista lokeihin liittyvistä viesteistä (viesti, jonka RouteKey on "MQ.log.error", välitetään jonoon).
4. "#" tarkoittaa 0 tai useita avainsanoja, ja "" tarkoittaa yhtä avainsanaa. Esimerkiksi "loki." Se voi vastata "log.warn", mutta ei "log.warn.timeout"; Mutta "log.#" vastaa yllä mainittua.
5. Vastaavasti, jos Exchange ei löydä jonoa, joka vastaa RouteKeytä, se lähettää tämän viestin.
|