Införandet: I RabbitMQ accepteras alla meddelanden som skickas in av producenter av Exchange, som sedan vidarebefordrar dem till Kö för lagring enligt en specifik policy RabbitMQ erbjuder fyra typer av utbyten: fanout, direkt, topic och header Header-läget används mindre i praktiken, och denna artikel jämför endast de tre första lägena.
1. Direkt utbyte
Alla meddelanden som skickas till Direct Exchange vidarebefordras till kön som anges i RouteKey.
1. Generellt kan du använda Exchange som följer med rabbitMQ:" (namnet på Exchange är en tom sträng, hädanefter kallad standard-Exchange).
2. I detta läge behövs inga bindningsoperationer på Exchange
3. En "RouteKey" krävs för meddelandehantering, vilket enkelt kan förstås som namnet på kön som ska skickas till.
4. Om könamnet som anges i RouteKey inte finns i vhost, släpps meddelandet.
2. Utväxling av utflykter
Alla meddelanden som skickas till Fanout-utbytet vidarebefordras till alla köer som är bundna till den Börsen.
1. Den kan förstås som ett mönster i routningstabellen
2. Detta läge kräver ingen RouteKey
3. Detta läge kräver att Exchange binds till Kö i förväg, en Exchange kan binda flera köer och en kö kan bindas till flera Exchanges.
4. Om Exchange som tog emot meddelandet inte är bunden till någon kö, släpps meddelandet.
3. Ämnesutbyte
Alla meddelanden som skickas till Topic Exchange vidarebefordras till alla köer som bryr sig om de ämnen som anges i RouteKey
1. Detta mönster är mer komplext, enkelt uttryckt, varje kö har sitt eget ämne av intresse, alla meddelanden har en "titel" (RouteKey), och Exchange kommer att vidarebefordra meddelandet till alla köer som kan fugue-matcha RouteKey för ämnet.
2. Detta läge kräver en RouteKey, kanske binder Exchange och Queue i förväg.
3. Vid bindning, ange ett ämne som kön bryr sig om, såsom "#.log.#" för att indikera att kön bryr sig om alla meddelanden relaterade till loggar (ett meddelande med RouteKey "MQ.log.error" vidarebefordras till kön).
4. "#" betyder 0 eller flera nyckelord, och "" betyder ett nyckelord. Till exempel, "log." Den kan matcha "log.warn", men kan inte matcha "log.warn.timeout"; Men "log.#" stämmer överens med ovanstående.
5. På samma sätt, om Exchange inte hittar en kö som matchar RouteKey, kommer det att släppa detta meddelande.
|