rabbitMq的幾種佇列

2021-08-21 23:34:53 字數 2539 閱讀 9384

這裡是rabbitmq 官網中的相關介紹:

其實上篇文章末尾給出的**就是簡單佇列。

乙個生產者對應乙個消費者!!!

生產者將訊息傳送到「hello」佇列。消費者從該佇列接收訊息。

乙個生產者對應多個消費者,但是只能有乙個消費者獲得訊息!!!

競爭消費者模式。

乙個生產者將訊息首先傳送到交換器,交換器繫結到多個佇列,然後被監聽該佇列的消費者所接收並消費。乙個訊息可以同時被多個消費者監聽,類似於廣播。

ps:x表示交換器,在rabbitmq中,交換器主要有四種型別:direct、fanout、topic、headers,這裡的交換器是 fanout。下面我們會詳細介紹這幾種交換器。

任何傳送到fanout exchange的訊息都會被**到與該exchange繫結(binding)的所有queue上。

1.可以理解為路由表的模式

2.這種模式不需要routekey

3.這種模式需要提前將exchange與queue進行繫結,乙個exchange可以繫結多個queue,乙個queue可以同多個exchange進行繫結。

4.如果接受到訊息的exchange沒有與任何queue繫結,則訊息會被拋棄。

應用場景

比如乙個**系統需要在管理員上傳商品新的時,前台系統必須更新,日誌系統必須記錄相應的日誌,那麼就可以將兩個佇列繫結到上傳交換器上,乙個用於前台系統更新,另乙個用於日誌系統記錄日誌。

生產者將訊息傳送到direct交換器,在繫結佇列和交換器的時候有乙個路由key,生產者傳送的訊息會指定乙個路由key,那麼訊息只會傳送到相應key相同的佇列,接著監聽該佇列的消費者消費訊息。

也就是讓消費者有選擇性的接收訊息。

應用場景

利用消費者能夠有選擇性的接收訊息的特性,比如我們**系統的後台管理系統對於商品進行修改、刪除、新增操作都需要更新前台系統的介面展示,而查詢操作確不需要,那麼這兩個佇列分開接收訊息就比較好。

回到頂部

上面的路由模式是根據路由key進行完整的匹配(完全相等才傳送訊息),這裡的萬用字元模式通俗的來講就是模糊匹配。

符號「#」表示匹配乙個或多個詞,符號「*」表示匹配乙個詞。

前面五種佇列模式介紹完了,但是實際上只有三種,第一種簡單佇列,第二種工作模式,剩下的三種都是和交換器繫結的合起來稱為一種,這小節我們就來詳細介紹交換器。

交換器分為四種,分別是:direct、fanout、topic和 headers。

前面三種分別對應路由模式、發布訂閱模式和萬用字元模式,headers 交換器允許匹配 amqp 訊息的 header 而非路由鍵,除此之外,header 交換器和 direct 交換器完全一致,但是效能卻差很多,因此基本上不會用到該交換器,這裡也不詳細介紹。

①、direct

如果路由鍵完全匹配的話,訊息才會被投放到相應的佇列。

當傳送一條訊息到fanout交換器上時,它會把訊息投放到所有附加在此交換器上的佇列。

設定模糊的繫結方式,「*」操作符將「.」視為分隔符,匹配單個字元;「#」操作符沒有分塊的概念,它將任意「.」均視為關鍵字的匹配部分,能夠匹配多個字元。

回到頂部

關於 rabbitmq 的五種佇列,其實實際使用最多的是最後一種主題模式,通過模糊匹配,使得操作更加自如。那麼我們總結一下有交換器參與的佇列(最後三種佇列)工作方式如下:

RabbitMQ訊息佇列中的幾種典型問題再探

剛剛接觸rabbitmq的時候,可能會被撲面而來的一堆概念搞的有些糊塗,又是 exchange 交換器 又是queue 佇列 又是routing key 路由 還有什麼 connection 連線 channel 管道 而且各個官網的例子當中,有些概念會出現 有些又不會出現,也沒有特別的講清楚,所以...

Rabbitmq延遲佇列

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...

訊息佇列Rabbitmq

rabbitmq server rabbitmqctl reset rabbitmqctl stop rabbitmqctl stop rabbitmqctl list users rabbitmqctl list queues rabbitmqctl add user user name user...