在最初狀態下,生產者傳送訊息的時候
(1) 生產者連線到rabbitmq broker , 建立乙個連線( connection) ,開啟乙個通道(channel)
(2) 生產者宣告乙個交換器,並設定相關屬性,比如交換機型別、是否持久化等
(3) 生產者宣告乙個佇列井設定相關屬性,比如是否排他、是否持久化、是否自動刪除等
( 4 ) 生產者通過路由鍵將交換器和佇列繫結起來
( 5 ) 生產者傳送訊息至rabbitmq broker,其中包含路由鍵、交換器等資訊
(6) 相應的交換器根據接收到的路由鍵查詢相匹配的佇列。
( 7 ) 如果找到,則將從生產者傳送過來的訊息存入相應的佇列中。
(8) 如果沒有找到,則根據生產者配置的屬性選擇丟棄還是回退給生產者
(9) 關閉通道。
(1 0) 關閉連線。
消費者接收訊息的過程:
(1)消費者連線到rabbitmq broker ,建立乙個連線(connection ) ,開啟乙個通道(channel) 。
(2) 消費者向rabbitmq broker 請求消費相應佇列中的訊息,可能會設定相應的**函式,
以及做一些準備工作
(3)等待rabbitmq broker 回應並投遞相應佇列中的訊息, 消費者接收訊息。
(4) 消費者確認( ack) 接收到的訊息。
( 5) rabbitmq 從佇列中刪除相應己經被確認的訊息。
( 6) 關閉通道。
( 7) 關閉連線。
如圖2-9 所示,我們又引入了兩個新的概念: connection 和channel 。我們知道無論是生產
者還是消費者,都需要和rabbitmq broker 建立連線,這個連線就是一條tcp 連線,也就是
connection 。一旦tcp 連線建立起來,客戶端緊接著可以建立乙個amqp 通道(channel) ,每
個通道都會被指派乙個唯一的d 。通道是建立在connection 之上的虛擬連線, rabbitmq 處理
的每條amqp 指令都是通過通道完成的。
我們完全可以直接使用connection 就能完成通道的工作,為什麼還要引入通道呢?試想這
樣乙個場景, 乙個應用程式中有很多個執行緒需要從rabbitmq 中消費訊息,或者生產訊息,那
麼必然需要建立很多個connection ,也就是許多個tcp 連線。然而對於作業系統而言,建立和
銷毀tcp 連線是非常昂貴的開銷,如果遇到使用高峰,效能瓶頸也隨之顯現。rabbitmq 採用
類似nio' (non-blocking 1/0) 的做法,選擇tcp 連線復用,不僅可以減少效能開銷,同時也
便於管理。
nio' ,也稱非阻塞uo , 包含三大核心部分channel (通道)、buffer (緩衝區)和selector (選擇器). nio 基於channel 和
buffer 進行操作,資料總是從通道讀取資料到緩衝區中,或者從緩衝區寫入到通道中。selector 用於監聽多個通道的事件(比
如連線開啟,資料到達等)。因此,單執行緒可以監聽多個資料的通道。nio 中有乙個很有名的reactor 模式,有興趣的讀者可以
深入研究。
每個執行緒把持乙個通道,所以通道復用了connection 的tcp 連線。同時rabbitmq 可以確
保每個執行緒的私密性,就像擁有獨立的連線一樣。當每個通道的流量不是很大時,復用單一的
connection 可以在產生效能瓶頸的情況下有效地節省tcp 連線資源。但是當通道本身的流量很
大時,這時候多個通道復用乙個connection 就會產生效能瓶頸,進而使整體的流量被限制了。
此時就需要開闢多個connection ,將這些通道均攤到這些connection 中, 至於這些相關的調優
策略需要根據業務自身的實際情況進行調節.
通道在amqp 中是乙個很重要的概念,大多數操作都是在通道這個層面展開的。在**清單
1-1 中也可以看出一些端倪,比如chan ne l . exchangedeclare 、channel . queuedeclare 、
channel . basicpublish 和channel . basicconsume 等方法。rabbitmq 相關的api 與amqp
緊密相連,比如channel.basicpublish 對應amqp 的basic.publish 命令.
rabbitmq使用流程
1,在windows下安裝otp win64 20.2.exe 2,安裝rabbitmq server x.x.x.exe 3,開啟外掛程式 rabbitmq managemen是管理後台的外掛程式 我們要開啟這個外掛程式才能通過瀏覽器訪問登入頁面 進入到sbin目錄下 rabbitmq plugi...
RabbitMQ搭建流程
rabbitmq是最受歡迎的開源訊息中介軟體之一,在全球範圍內被廣泛應用。rabbitmq是輕量級且易於部署的,能支援多種訊息協議。rabbitmq可以部署在分布式系統中,以滿足大規模 高可用的要求。我們先來了解下rabbitmq中的相關概念,這裡以5種訊息模式中的路由模式為例 640.png 1 ...
RabbitMQ安裝實際流程
編譯 yum y install make gcc gcc c kernel devel m4 ncurses devel openssl devel unixodbc devel yum install epel release rabbitmq依賴於erlang,需要先安裝erlang。yum ...