Introducere: În RabbitMQ, toate mesajele trimise de producători sunt acceptate de Exchange, care apoi le redirecționează către coadă pentru stocare conform unei politici specifice RabbitMQ oferă patru tipuri de schimburi: fanout, direct, topic și header Modul de antet este mai puțin folosit în practică, iar acest articol compară doar primele trei moduri.
1. Schimb direct
Orice mesaje trimise către Direct Exchange sunt redirecționate către Coada specificată în RouteKey.
1. În general, poți folosi Exchange care vine cu rabbitMQ:" (numele Exchange este un șir gol, denumit în continuare Exchange implicit).
2. În acest mod, nu este nevoie să se efectueze operațiuni de binding pe Exchange
3. Un "RouteKey" este necesar pentru mesagerie, care poate fi înțeles simplu ca numele cozii către care trebuie trimis.
4. Dacă numele cozii specificat în RouteKey nu există în vhost, mesajul este eliminat.
2. Schimb de fani
Orice mesaje trimise către Fanout Exchange sunt redirecționate către toate cozile legate de acel Exchange.
1. Poate fi înțeleasă ca un model al tabelului de rutare
2. Acest mod nu necesită un RouteKey
3. Acest mod necesită legarea Schimbului de Coadă în avans, un Exchange poate lega mai multe Cozi, iar o coadă poate fi legată de mai multe Schimburi.
4. Dacă Exchange-ul care a primit mesajul nu este legat de nicio coadă, mesajul este eliminat.
3. Schimb de subiecte
Orice mesaje trimise către Schimbul de Subiecte sunt redirecționate către toate Cozile care se ocupă de subiectele specificate în RouteKey
1. Acest tipar este mai complex, pe scurt, fiecare coadă are propriul subiect de interes, toate mesajele au un "titlu" (RouteKey), iar Exchange va redirecționa mesajul către toate cozile care pot corespunde perfect cu RouteKey al subiectului de interes.
2. Acest mod necesită un RouteKey, poate legând Exchange și Queue în avans.
3. Când se leagă, se indică un subiect care îi interesează cozii, cum ar fi "#.log.#" pentru a indica faptul că coada ține cont de toate mesajele legate de jurnale (un mesaj cu RouteKey "MQ.log.error" va fi redirecționat către coadă).
4. "#" înseamnă 0 sau mai multe cuvinte cheie, iar "" înseamnă un cuvânt cheie. De exemplu, "log". Poate corespunde cu "log.warn", dar nu poate corespunde cu "log.warn.timeout"; Dar "log.#" corespunde cu cele de mai sus.
5. În mod similar, dacă Exchange nu găsește o coadă care să corespundă cu RouteKey, va trimite acest mesaj.
|