天天看點

rabbitmq中的Connection 和 Channel

無論是生産 者還是消費者,都需要和 RabbitMQ Broker 建立連接配接,這個連接配接就是一條 TCP 連接配接,也就是 Connection。 一旦 TCP 連接配接建立起來,用戶端緊接着可以建立一個 AMQP 信道 (Channel) ,每 個信道都會被指派一個唯一 的 D 。信道是建立在 Connection 之上的虛拟連接配接, RabbitMQ 處理 的每條 AMQP 指令都是通過信道完成的。

rabbitmq中的Connection 和 Channel

為什麼還要引入信道呢? 

試想這樣一個場景,一個應用程式中有很多個線程需要從 RabbitMQ 中消費消息,或者生産消息,那 麼必然需要建立很多個 Connection ,也就是許多個 TCP 連接配接。然而對于作業系統而言,建立和 銷毀 TCP 連接配接是非常昂貴的開銷,如果遇到使用高峰,性能瓶頸也随之顯現。 RabbitMQ 采用 類似 NIO' (Non-blocking 1/0) 的做法,選擇 TCP 連接配接複用,不僅可以減少性能開銷,同時也 便于管理 。

1 NIO ,也稱非阻塞 UO , 包含三大核心部分Channel (信道)、 Buffer (緩沖區)和 Selector (選擇器). NIO 基于 Channel 和Buffer 進行操作,資料總是從信道讀取資料到緩沖區中,或者從緩沖區寫入到信道中。 Selector 用于監聽多個信道的事件(比 如連接配接打開,資料到達等)。是以,單線程可以監聽多個資料的信道。 NIO 中有一個很有名的 Reactor 模式,有興趣的讀者可以深入研究。