Introduksjon: I RabbitMQ blir alle meldinger sendt inn av produsenter akseptert av Exchange, som deretter videresender dem til Kø for lagring i henhold til en spesifikk policy RabbitMQ tilbyr fire typer utvekslinger: fanout, direkte, topic og header Header-modusen brukes mindre i praksis, og denne artikkelen sammenligner kun de tre første modusene.
1. Direkte utveksling
Alle meldinger sendt til Direct Exchange videresendes til køen som er spesifisert i RouteKey.
1. Generelt kan du bruke Exchange som følger med rabbitMQ:" (navnet på Exchange er en tom streng, heretter kalt standard Exchange).
2. I denne modusen er det ikke nødvendig å utføre noen bindingsoperasjoner på Exchange
3. En "RouteKey" kreves for meldingsutveksling, som enkelt kan forstås som navnet på køen som skal sendes til.
4. Hvis kønavnet spesifisert i RouteKey ikke finnes i vhosten, blir meldingen droppet.
2. Utvekslingsutveksling
Alle meldinger sendt til Fanout-utvekslingen videresendes til alle køer knyttet til den utvekslingen.
1. Den kan forstås som et mønster i rutingtabellen
2. Denne modusen krever ikke RouteKey
3. Denne modusen krever at Exchange bindes til køen på forhånd, én Exchange kan binde flere køer, og én kø kan bindes til flere Exchanges.
4. Hvis Exchange som mottok meldingen ikke er bundet til noen kø, blir meldingen droppet.
3. Temautveksling
Alle meldinger som sendes til Topic Exchange videresendes til alle køer som bryr seg om emnene spesifisert i RouteKey
1. Dette mønsteret er mer komplekst, enkelt sagt, hver kø har sitt eget tema av bekymring, alle meldinger har en "tittel" (RouteKey), og Exchange vil videresende meldingen til alle køer som kan samsvare med RouteKey for det aktuelle temaet.
2. Denne modusen krever en RouteKey, kanskje binding av Exchange og Queue på forhånd.
3. Når du binder, oppgi et tema som køen bryr seg om, for eksempel "#.log.#" for å indikere at køen bryr seg om alle meldinger relatert til logger (en melding med RouteKey på "MQ.log.error" vil bli videresendt til køen).
4. "#" betyr 0 eller flere nøkkelord, og "" betyr ett nøkkelord. For eksempel, «log». Den kan matche "log.warn", men kan ikke matche "log.warn.timeout"; Men "log.#" stemmer over.
5. På samme måte, hvis Exchange ikke finner en kø som matcher RouteKey, vil den droppe denne meldingen.
|