RabbitMQ學習筆記1

2021-09-11 18:45:45 字數 1720 閱讀 5524

博主從事網路程式設計3年了,但是說來慚愧的是,工作中沒有使用過訊息佇列。所以呢,打算從今天開始系統學習一些訊息佇列相關的知識,部落格也就作為筆記了。記錄一下自己的一些理解過程,有不對之處希望各位指出。

生產者、消費者與訊息佇列

首先呢,訊息佇列不生產資料,他只是乙個資訊的搬運工具。資料由生產者提供,經過訊息佇列的傳遞,最終消費者接受到了資料。就好比廚師,餐車,顧客的關係:廚師做飯(生產者),餐車把飯菜由後廚送到顧客的餐桌(訊息佇列),顧客吃到飯菜(消費者)。以上內容可以由下圖進行表示:

訊息通訊

應用程式和rabbit**伺服器中間建立一條tcp連線。一旦tcp連線開啟,那麼應用程式就可以在tcp的內部建立一條虛擬連線的通道,每一條訊息都是根據虛擬連線的先到傳送的。

為什麼要建立通道,而不是直接通過tcp連線進行通訊的呢?因為對於作業系統拉說,建立和銷毀tcp會話是非常高昂的開銷。

簡單看一下,乙個tcp連線需要什麼樣的資源:

核心記憶體(包括各種資料結構及分配的緩衝區)、檔案描述符、埠、位址(源ip 源埠 目標ip 目標埠,這四元組構成了乙個唯一的tcp連線)、系統總的開啟檔案數。

1)埠,可以在1024-65535之間任選乙個,

2)檔案描述符fd,每個tcp連線占用乙個,那麼乙個檔案描述符下的檔案大約佔1k位元組,而核心對這塊也有說明,檔案描述符建議最多占用10%的記憶體。

3)記憶體,tcp連線需要雙方接收和傳送資料,那麼就需要乙個讀緩衝區和寫緩衝區。

每次建立tcp連線時,建立需要三次握手,銷毀需要四次分手。如果不使用通道,那麼引用程式就會使用tcp的方式連線到rabbitmq,高峰時每秒成千上萬條連線會造成資源的巨大浪費(一條tcp消耗資源,成千上萬的tcp會非常消耗資源),而且作業系統每秒處理tcp連線數量也是有限的,必定會造成效能瓶頸。

交換器,佇列和繫結

生產者將訊息發布到交換器上;最終到達佇列,被消費者接收;繫結決定了訊息如何從路由器到特定的佇列。

交換器的型別

amqp協議中定義了四種型別的交換器,分別是direct,fanout,topic,headers。

1)direct:

比較簡單,如果路由匹配,那麼訊息被投遞到響應佇列。

比兔上圖,黃瓜被投入q1,香蕉被投入q2,藍莓被投入q3;

2)fanout:

當把一條訊息傳送到fanout交換器時,他會把訊息投遞給所有附加在此交換器的佇列上,允許對單條訊息進行不同的反應。

沒一條通道上都收到了香蕉,黃瓜和藍莓的資訊。

3)topic:

topic交換器允許來自不同源頭的訊息達到統一佇列。

這種模式較為複雜,簡單來說,就是每個佇列都有其關心的主題,所有的訊息都帶有乙個「標題」(routekey),exchange會將訊息**到所有關注主題能與routekey模糊匹配的佇列

RabbitMQ學習筆記 1

rabbitmq的特性 開源 開發語言是erlang 平台和 商無關性 為幾乎全部開發語言提供了客戶端工具並能執行在所有主流計算機平台上 輕量級 執行核心功能以及諸如管理介面的外掛程式只需要不到40mb記憶體 面向大多數現代語言的客戶端開發庫 靈活控制訊息通訊的平衡性 效能與吞吐量平衡的靈活控制 高...

RabbitMQ學習 1 RabbitMQ介紹

rabbitmq是乙個訊息 mq表示的是message queue,即訊息佇列的意思。它的核心原理就是接受和傳送訊息。rabbitmq相關的專有名詞 1 生產 producing 即傳送訊息。生產者 producer 指傳送訊息的程式,一般用p表示。2 佇列 queue 訊息儲存在佇列中,通過應用程...

rabbitmq學習筆記一

首先我們先看rabbitmq原理圖 exchange交換器 接受訊息和路由訊息,然後將訊息傳送給訊息佇列。對於每乙個虛擬主機內部,交換器有獨一無二的名字 應用程式在其許可權範圍之內可以自由建立 共享 使用和銷毀交換例項。持久交換器可以使持久的 臨時的 或者自動刪除的。持久直到顯式刪除時消失 臨時交換...