RabbitMQ入門到進階系列(一)

RabbitMQ入門到進階系列:

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 的分發依據

乍一看上面的幾個概念還挺晦澀難懂的,下一章節我們將通過幾個實例代碼體會一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章