2.2 Topic exchange
盡管使用直接交換改進了我們的系統,它仍然有局限性 - 不能做基于多個标準的路由。
比如在日志系統,可能不僅要根據嚴重性訂閱日志,還要根據日志源訂閱日志。
你可能從syslog unix工具中了解這個概念,它根據嚴重性(info / warn / crit …)和facility(auth / cron / kern …)來路由日志。
這更具靈活性 - 我們可能想要監聽來自 cron 的關鍵錯誤以及來自 kern 的所有日志。
為了在日志記錄系統中實作這一點,還需要了解更複雜的主題交換機。
*可比對一個單詞
#可比對零或多個單詞
所有發送到Topic Exchange的消息會被轉發到所有關心RouteKey中指
定Topic的Queue上
Exchange将RouteKey和某Topic進行模糊比對,此時隊列需要綁定一個Topic
2.2.1 執行個體1

在這個例子中,我們将發送所有描述動物的消息。消息将與包含三個單詞(兩個點)的routing key一起發送.
routing key中的第一個單詞描述速度,第二顔色,第三是物種:“。。”。
我們建立了三個綁定:Q1綁定了綁定鍵“* .orange.”,Q2綁定了“.*.rabbit”和“lazy.#”
這些綁定可總結為:
Q1對所有橙色動物感興趣
Q2希望聽到關于兔子的一切,以及關于懶惰動物的一切
routing key設定為“quick.orange.rabbit”的消息将傳遞到兩個隊列。消息“lazy.orange.elephant”也将同時發送給他們.
另一方面
“quick.orange.fox”隻會轉到第一個隊列
而“lazy.brown.fox”隻會轉到第二個隊列
“lazy.pink.rabbit”将僅傳遞到第二個隊列一次,即使它比對兩個綁定
“quick.brown.fox”與任何綁定都不比對,是以它将被丢棄。
如果我們違背我們的約定并發送帶有一個或四個單詞的消息,例如“orange” or “quick.orange.male.rabbit”,會發生什麼?好吧,這些消息将不會比對任何綁定,是以将丢失.
另一方面,“lazy.orange.male.rabbit”,雖然它有四個單詞,也會比對最後一個綁定,并将被傳遞到第二個隊列。
執行個體圖
實操示範
- Pro
-
RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中) - Con
-
RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中) - 啟動消費者:
-
RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中) -
RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中) - 啟動生産者:
-
RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中) - 消費端收到了消息
- 修改比對格式,理論上隻能接受前兩個消息
-
RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中) - 注意在管控台,先将之前的比對綁定取消!
-
RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中) -
RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中) - 顯然僅能接受前兩個消息
-
RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中)