天天看點

RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中)

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

RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中)

在這個例子中,我們将發送所有描述動物的消息。消息将與包含三個單詞(兩個點)的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”,雖然它有四個單詞,也會比對最後一個綁定,并将被傳遞到第二個隊列。

執行個體圖

RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中)
RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中)

實操示範

  • Pro
  • RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中)
  • Con
  • RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中)
  • 啟動消費者:
  • RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中)
  • RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中)
  • 啟動生産者:
  • RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中)
  • 消費端收到了消息
  • 修改比對格式,理論上隻能接受前兩個消息
  • RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中)
  • 注意在管控台,先将之前的比對綁定取消!
  • RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中)
  • RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中)
  • 顯然僅能接受前兩個消息
  • RabbitMQ面試必備知識點及實戰 - Exchange交換機類型詳解(中)