高級消息隊列協議:AMQP,在分布式系統中存儲轉發消息!

喜歡更多互聯網技術相關的同學,可以關注一下我哦!

我們經常看到一些很高大上的術語:分佈式存儲,消息隊列,消息中間件等等!的確,這些術語真的非常高大上,或許很多同學都接觸不到。但是儘管我們接觸不到,但是我麼可以適當瞭解一下這些東西,因為以後萬一用到了,也不會那麼懵!


那麼這一次,我們來了解一下AMQP。

什麼是AMQP?

AMQP,Advanced Message Queuing Protocol,中文意思:高級消息隊列協議!起源於2003年,是一個提供統一消息服務的應用層標準協議,AMQP是面向消息的,同時支持點對點和發佈/訂閱通信模式的協議。它支持符合要求的客戶端應用和消息中間件代理之間進行通信!

高級消息隊列協議:AMQP,在分佈式系統中存儲轉發消息!

什麼是RabbitMQ?

上面我們知道了AMQP是一種面向消息的協議!RabbitMQ是實現了AMQP的消息中間件的一種!服務端/代理使用的Erlang語言進行開發,支持多種客戶端,如常見的JAVA、python、C、C#等!

高級消息隊列協議:AMQP,在分佈式系統中存儲轉發消息!

AMQP架構分層

AMQP一般分為三層!分別是Model Layer(模型層:規範代理端的行為),Session Layer(會話層:定義客戶端和代理的上下文),Transport Layer(傳輸層:傳輸二進制數據流)

高級消息隊列協議:AMQP,在分佈式系統中存儲轉發消息!

AMQP架構分層

AMQP工作過程

message(消息)被Publisher(發佈者)發送到Exchange(交換機),然後交換機將收到的消息根據路由規則分發給綁定的Queue(隊列),最後AMQP代理會將消息傳遞給訂閱了此隊列的消費者。下圖就是一個“hello,world”的消息傳遞例子!


高級消息隊列協議:AMQP,在分佈式系統中存儲轉發消息!

工作流程

AMQP的代理提供的交換機類型

(1)直連交換機

其實還有一種默認交換機,默認交換機實際上就是一個由代理預先聲明好的沒有名字的直連交換機。有一個特殊的屬性:每個新建隊列都會自動綁定到默認交換機上,綁定的路由鍵名稱與隊列名稱相同。直連交換機的工作原理:

  • 將一個隊列綁定到某個交換機上,同時賦予該綁定一個路由鍵

  • 當一個攜帶著路由鍵為R的消息被髮送到直連交換機時,交換機會把它路由給綁定值同樣為R的隊列!

(2)扇形交換機

扇形交換機將消息路由給綁定到它身上的所有隊列,而不理會綁定的路由鍵。適用場景:

  • 大規模多用戶在線遊戲處理排行版更新等全局事件

  • 體育新聞網站可以用來實時將比分更新到移動客戶端

  • 分發系統使用它來廣播各種狀態和配置更新

  • 群聊用來分發消息給參與群聊的用戶

高級消息隊列協議:AMQP,在分佈式系統中存儲轉發消息!

扇形示例圖

(3)主題交換機

主題交換機通過對消息的路由鍵和隊列到交換機的綁定模式之間的匹配,將消息路由給一個或者多個隊列!類似於MQTT的發佈/訂閱的模型!主要實現消息的多播路由。常見的使用場景:

  • 分發有關於特定地理位置的數據,例如銷售點

  • 涉及到分類或者標籤的新聞更新(如頭條有廣州的分區!有互聯網分區)

  • 雲端不同種類服務的協調

  • 分佈式架構/基於系統的軟件封裝,其中每個構建者僅能處理一個特定的機構或者系統

(4)頭交換機

頭交換機使用多個消息屬性來代替路由鍵建立路由規則,通過判斷消息頭的值能否與智能的綁定相匹配來確定路由規則。頭交換機可以視為直連交換機的另一種表現形式。頭交換機能夠像直連交換機一樣工作,但是不同的是頭交換機的路由規則建立在偷屬性之上,而不是路由鍵。路由鍵必須是字符串,而頭屬性值可以使整數或者哈希值。

AMQP特點

(1)普遍性:開放的互聯網協議標準,支持方便的使用,實現和擴展。

(2)安全可信:支持全局食物的網絡基礎設施,作為業務消息的防篡改;支持消息持久性,對於技術失敗可以修復

(3)精確性:最多一次,最少一次,有且只有一次的投遞方式,類型MQTT的Qos級別。

(4)易用性:二進制的傳輸協議。


好了,這次的AMQP的瞭解就到這裡了,之後,我會用JAVA語言實現基於AMQP的消息中間件使用!喜歡的同學記得關注咯!

喜歡的同學,記得收藏、點贊、轉發、關注了哦!


分享到:


相關文章: