RabbitMQ入門到進階系列:
RabbitMQ入門到進階系列(一)
第一章: MQ 的基本概念
1.1 MQ概述
MQ全稱 Message Queue(消息隊列),是在消息的傳輸過程中保存消息的容器。多用於分佈式系統之間進
行通信。
- MQ,消息隊列,存儲消息的中間件
- 分佈式系統通信兩種方式:直接遠程調用 和 藉助第三方 完成間接通信
- 發送方稱爲生產者,接收方稱爲消費者
1.2 MQ 的優勢和劣勢
優勢:
- 應用解耦
- 異步提速
- 削峯填谷
劣勢
- 系統可用性降低
- 系統複雜度提高
- 一致性問題
1.3常見的 MQ 產品
RabbitMQ | ActiveMQ | RocketMQ | Kafka | |
公司/社區 | Rabbit | Apache | 阿里 | Apache |
開發語言 | Erlang | Java | Java | Scala&Java |
協議支持 | AMQP,XMPP,SMTP, STOMP |
OpenWire,STOMP, REST,XMPP,AMQP |
自定義 | 自定義協議,社區封裝 了http協議支持 |
客戶端支持語言 | 官方支持Erlang,.Net, java等,社區產出多種API, 幾乎支持所有語言 |
Java,C,C++, Python,PHP, Perl,.net等 |
Java,C++(不成熟) | 官方支持Java,社區產出 多種API,如PHP, Python等 |
單機吞吐量 | 萬級(其次) | 萬級(最差) | 十萬級(最好) | 十萬級(次之) |
消息延遲 | 微秒級 | 毫秒級 | 毫秒級 | 毫秒以內 |
功能特性 | 併發能力強,性能極其好, 延時低,社區活躍,管理 界面豐富 |
老牌產品,成熟度高, 文檔較多 |
MQ功能比較完備,擴 展性佳 |
只支持主要的MQ功能, 畢竟是爲大數據領域準 備的 |
第二章:RabbitMQ簡介
2.1RabitMQ概述
2007年,Rabbit 技術公司基於 AMQP 標準開發的 RabbitMQ 1.0 發佈。RabbitMQ 採用 Erlang 語言開發。
Erlang 語言由 Ericson 設計,專門爲開發高併發和分佈式系統的一種語言,在電信領域使用廣泛。
2.2安裝RabbitMQ
2.3RabbitMQ的架構
2.4RabbitMQ的相關概念
Broker:接收和分發消息的應用,RabbitMQ Server就是 Message Broker
Virtual host:出於多租戶和安全因素設計的,把 AMQP 的基本組件劃分到一個虛擬的分組中,類似於網
絡中的 namespace 概念。當多個不同的用戶使用同一個 RabbitMQ server 提供的服務時,可以劃分出多
個vhost,每個用戶在自己的 vhost 創建 exchange/queue 等
Connection:publisher/consumer 和 broker 之間的 TCP 連接
Channel:如果每一次訪問 RabbitMQ 都建立一個 Connection,在消息量大的時候建立 TCP Connection
的開銷將是巨大的,效率也較低。Channel 是在 connection 內部建立的邏輯連接,如果應用程序支持多線
程,通常每個thread創建單獨的 channel 進行通訊,AMQP method 包含了channel id 幫助客戶端和
message broker 識別 channel,所以 channel 之間是完全隔離的。Channel 作爲輕量級的 Connection
極大減少了操作系統建立 TCP connection 的開銷
Exchange:message 到達 broker 的第一站,根據分發規則,匹配查詢表中的 routing key,分發消息到
queue 中去。常用的類型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)
Queue:消息最終被送到這裏等待 consumer 取走
Binding:exchange 和 queue 之間的虛擬連接,binding 中可以包含 routing key。Binding 信息被保存
到 exchange 中的查詢表中,用於 message 的分發依據
乍一看上面的幾個概念還挺晦澀難懂的,下一章節我們將通過幾個實例代碼體會一下。