RabbitMq | 介紹

開發環境:

RabbitMQ是採用erlang語言開發的,所以必須有erlang環境纔可以運行

大多應用中,可通過消息服務中間件來提升系統異步通信、擴展解耦能力
消息服務中兩個重要概念:

消息代理(message broker)和目的地(destination)

  • 當消息發送者發送消息以後,將由消息代理接管,消息代理保證消息傳遞到指定目的地。
  • 消息隊列主要有兩種形式的目的地
    隊列(queue):點對點消息通信(point-to-point)
    主題(topic):發佈(publish)/訂閱(subscribe)消息通信

隊列的作用:

異步處理:
在這裏插入圖片描述

流量削峯:

在這裏插入圖片描述

應用解耦:

在這裏插入圖片描述

rabbitMq有五種隊列:

  • 點對點(簡單)的隊列
  • 工作(公平性)隊列模式
  • 發佈訂閱模式
  • 路由模式Routing
  • 通配符模式Topics

規範:

JMS(Java Message Service)JAVA消息服務:
基於JVM消息代理的規範。ActiveMQ、HornetMQ是JMS實現

AMQP(Advanced Message Queuing Protocol)高級消息隊列協議,也是一個消息代理的規範,兼容JMSRabbitMQ是AMQP的實現

AMQP提供了五種消息模型:
(1)、direct exchange
(2)、fanout exchange
(3)、topic change
(4)、headers exchange
(5)、system exchange
本質來講,後四種和JMS的pub/sub模型沒有太大差別,僅是在路由機制上做了更詳細的劃分

核心概念:

Message
消息,消息是不具名的,它由消息頭和消息體組成。消息體是不透明的,而消息頭則由一系列的可選屬性組成,這些屬性包括routing-key(路由鍵)、priority(相對於其他消息的優先權)、delivery-mode(指出該消息可能需要持久性存儲)等。

Publisher
消息的生產者,也是一個向交換器發佈消息的客戶端應用程序。

Exchange
交換器,用來接收生產者發送的消息並將這些消息路由給服務器中的隊列。
Exchange有4種類型:direct(默認),fanout, topic, 和headers,不同類型的Exchange轉發消息的策略有所區別

Queue
消息隊列,用來保存消息直到發送給消費者。它是消息的容器,也是消息的終點。一個消息可投入一個或多個隊列。消息一直在隊列裏面,等待消費者連接到這個隊列將其取走。

Binding
綁定,用於消息隊列和交換器之間的關聯。一個綁定就是基於路由鍵將交換器和消息隊列連接起來的路由規則,所以可以將交換器理解成一個由綁定構成的路由表。
Exchange 和Queue的綁定可以是多對多的關係。

Connection
網絡連接,比如一個TCP連接。

Channel
信道,多路複用連接中的一條獨立的雙向數據流通道。信道是建立在真實的TCP連接內的虛擬連接,AMQP 命令都是通過信道發出去的,不管是發佈消息、訂閱隊列還是接收消息,這些動作都是通過信道完成。因爲對於操作系統來說建立和銷燬 TCP 都是非常昂貴的開銷,所以引入了信道的概念,以複用一條 TCP 連接。

RabbitMQ 爲什麼需要信道?爲什麼不是 TCP 直接通信?

  1. TCP 的創建和銷燬開銷特別大。創建需要 3 次握手,銷燬需要 4 次分手。
  2. 如果不用信道,那應用程序就會以 TCP 鏈接 Rabbit,高峯時每秒成千上萬條鏈接
    會造成資源巨大的浪費,而且操作系統每秒處理 TCP 鏈接數也是有限制的,必定造成性能
    瓶頸。
  3. 信道的原理是一條線程一條通道,多條線程多條通道同用一條 TCP 鏈接。一條 TCP
    鏈接可以容納無限的信道,即使每秒成千上萬的請求也不會成爲性能的瓶頸。

Consumer
消息的消費者,表示一個從消息隊列中取得消息的客戶端應用程序。

Virtual Host
虛擬主機,表示一批交換器、消息隊列和相關對象。虛擬主機是共享相同的身份認證和加密環境的獨立服務器域。每個 vhost 本質上就是一個 mini 版的 RabbitMQ 服務器,擁有自己的隊列、交換器、綁定和權限機制。vhost 是 AMQP 概念的基礎,必須在連接時指定,RabbitMQ 默認的 vhost 是 / 。

在這裏插入圖片描述
Broker
表示消息隊列服務器實體

模型圖:

在這裏插入圖片描述

Exchange交換機:

Direct exchange(直連交換機)是根據消息攜帶的路由鍵(routing key)將消息投遞給對應隊列的

Fanout exchange(扇型交換機)將消息路由給綁定到它身上的所有隊列

Topic exchange(主題交換機)隊列通過路由鍵綁定到交換機上,然後,交換機根據消息裏的路由值,將消息路由給一個或多個綁定隊列

Headers exchange(頭交換機)類似主題交換機,但是頭交換機使用多個消息屬性來代替路由鍵建立路由規則。通過判斷消息頭的值能否與指定的綁定相匹配來確立路由規則。

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