Wprowadzenie: W RabbitMQ wszystkie wiadomości przesyłane przez producentów są akceptowane przez Exchange, który następnie przekazuje je do Queue do przechowywania zgodnie z określoną polityką RabbitMQ oferuje cztery typy wymian: fanout, bezpośredni, tematyczny i nagłówkowy Tryb nagłówka jest w praktyce rzadziej używany, a ten artykuł porównuje jedynie pierwsze trzy tryby.
1. Bezpośrednia wymiana
Wszystkie wiadomości wysyłane do Direct Exchange są przekazywane do kolejki określonej w RouteKey.
1. Ogólnie rzecz biorąc, możesz użyć Exchange dołączonego do rabbitMQ:" (nazwa Exchange to pusty ciąg znaków, dalej nazywany domyślną Exchange).
2. W tym trybie nie ma potrzeby wykonywania żadnych operacji wiązania na Exchange
3. Do wysyłania wiadomości wymagany jest "RouteKey", który można po prostu zrozumieć jako nazwę kolejki do wysłania.
4. Jeśli nazwa kolejki podana w RouteKey nie istnieje w vhost, wiadomość zostaje odrzucona.
2. Wymiana Fanout
Wszystkie wiadomości wysyłane do Fanout Exchange są przekazywane do wszystkich kolejek powiązanych z tą Centralą.
1. Można ją rozumieć jako wzór tablicy routingu
2. Ten tryb nie wymaga RouteKey
3. Ten tryb wymaga wcześniejszego powiązania Exchange z kolejką – jedna Giełda może wiązać wiele kolejek, a jedna może być powiązana z wieloma Centralami.
4. Jeśli Exchange, który otrzymał wiadomość, nie jest powiązany z żadną kolejką, wiadomość zostaje odrzucona.
3. Wymiana tematów
Wszystkie wiadomości wysyłane do Topic Exchange są przekazywane do wszystkich kolejek, które zajmują się tematami określonymi w RouteKey
1. Ten wzorzec jest bardziej złożony, mówiąc wprost: każda kolejka ma własny temat zainteresowania, wszystkie wiadomości mają "tytuł" (RouteKey), a Exchange przekieruje wiadomość do wszystkich kolejek, które mogą w pewnym stopniu odpowiadać RouteKey danego tematu.
2. Ten tryb wymaga RouteKey, być może wcześniej wiązającego Exchange i Queue.
3. Podczas wiązania podaj temat, na którym zależy kolejce, na przykład "#.log.#", aby wskazać, że kolejka dba o wszystkie wiadomości związane z logami (wiadomość z RouteKey "MQ.log.error" zostanie przekazana do kolejki).
4. "#" oznacza 0 lub kilka słów kluczowych, a "" oznacza jedno słowo kluczowe. Na przykład "log". Może dopasować "log.warn", ale nie może dopasować "log.warn.timeout"; Ale "log.#" pasuje do powyższego.
5. Podobnie, jeśli Exchange nie znajdzie kolejki odpowiadającej RouteKey, odrzuca tę wiadomość.
|