Introduzione: In RabbitMQ, tutti i messaggi inviati dai produttori sono accettati da Exchange, che poi li inoltra alla coda per l'archiviazione secondo una politica specifica RabbitMQ offre quattro tipi di scambi: fanout, direct, topic e header La modalità header è meno utilizzata nella pratica, e questo articolo confronta solo le prime tre modalità.
1. Scambio diretto
Qualsiasi messaggio inviato a Direct Exchange viene inoltrato alla Coda specificata nella RouteKey.
1. In generale, puoi usare l'Exchange che include rabbitMQ:" (il nome dello Exchange è una stringa vuota, d'ora in poi chiamata Exchange predefinita).
2. In questa modalità, non è necessario eseguire operazioni di binding su Exchange
3. Per la messaggistica è richiesta una "RouteKey", che può essere semplicemente intesa come il nome della coda a cui essere inviata.
4. Se il nome della coda specificato nel RouteKey non esiste nel vhost, il messaggio viene eliminato.
2. Scambio di fanout
Qualsiasi messaggio inviato allo Exchange Fanout viene inoltrato a tutte le Code legate a tale Exchange.
1. Può essere inteso come un modello della tabella di instradamento
2. Questa modalità non richiede un RouteKey
3. Questa modalità richiede di associare Exchange alla Coda in anticipo, uno Exchange può associare più Code e una Coda può essere associata a più Exchange.
4. Se l'Exchange che ha ricevuto il messaggio non è vincolato a nessuna Coda, il messaggio viene eliminato.
3. Scambio di Argomenti
Qualsiasi messaggio inviato allo Topic Exchange viene inoltrato a tutte le Code che si occupano degli argomenti specificati nella RouteKey
1. Questo schema è più complesso, in parole semplici, ogni coda ha il proprio argomento di interesse, tutti i messaggi hanno un "titolo" (RouteKey), e Exchange inoltrerà il messaggio a tutte le code che possono corrispondere perfettamente al RouteKey dell'argomento in questione.
2. Questa modalità richiede una RouteKey, forse collegando Exchange e Queue in anticipo.
3. Durante il binding, fornire un argomento che preoccupa la coda, come "#.log.#" per indicare che la coda tiene a tutti i messaggi relativi ai log (un messaggio con una RouteKey di "MQ.log.error" verrà inoltrato alla coda).
4. "#" significa 0 o più parole chiave, e "" significa una parola chiave. Per esempio, "log." Può corrispondere a "log.warn", ma non può corrispondere a "log.warn.timeout"; Ma "log.#" corrisponde a quanto sopra.
5. Analogamente, se Exchange non trova una Coda che corrisponda alla RouteKey, invierà questo messaggio.
|