分佈式消息中間件介紹

1、爲什麼要使用消息中間件

比如客戶端發送一個請求給訂單(order)系統,訂單系統發送請求給庫存系統,需要減庫存。
傳統的實現方案:用戶下單,訂單處理完之後更改庫存,庫存更改完之後返回處理結果
在這裏插入圖片描述
使用線程的解決方案:用戶下單,訂單系統開闢線程去調用庫存,同時返回下訂單的結果
在這裏插入圖片描述
最終解決方案:只用一個獨立的系統來處理他們的消息
在這裏插入圖片描述

2、RabbitMQ和AMQP介紹
MQ:顧名思義message Queue消息隊列,隊列的特點是先進先出,只是消息對列裏面
存放的內容是消息而已
RabbitMQ是一個基於AMQP協議的企業級消息中間件,服務端語言由Erlang語言(面向
併發編程)編寫,對高併發有着天然的優勢,客戶端支持非常多的語言。
AMQP:即Advanced Message Queuing Protocol,一個提供統一消息服務的應用層標準
高級消息隊列協議,是應用層協議的一個開放標準,爲面向消息的中間件設計。基於此
協議的客戶端與消息中間件可傳遞消息,並不受客戶端/中間件不同產品,不同的開發語
言等條件的限制。Erlang中的實現有RabbitMQ等。
AMQP協議中的基本概念:
1)Broker: 接收和分發消息的應用,我們在介紹消息中間件的時候所說的消息系統就是Message Broker
2)Virtual host: 出於多租戶和安全因素設計的,把AMQP的基本組件劃分到一個虛擬的
分組中,類似於網絡中 的namespace概念。當多個不同的用戶使用同一個RabbitMQ 
server提供的服務時,可以劃分出多個vhost, 每個用戶在自己的vhost創建exchange/
queue等。 
3)Connection: publisher/consumer和broker之間的TCP連接。斷開連接的操作只會在
client端進行,Broker 不會斷開連接,除非出現網絡故障或broker服務出現問題
4)Channel: 如果每一次訪問RabbitMQ都建立一個Connection,在消息量大的時候建立
TCP Connection的開 銷將是巨大的,效率也較低。Channel是在connection內部建立的
邏輯連接,如果應用程序支持多線程,通 常每個thread創建單獨的channel進行通訊,
AMQP method包含了channel id幫助客戶端和message broker 識別channel,所以
channel之間是完全隔離的。Channel作爲輕量級的Connection極大減少了操作系統建立
 TCP connection的開銷。 
 5)Exchange: message到達broker的第一站,根據分發規則,匹配查詢表中的routing 
 key,分發消息到queue 中去。常用的類型有:direct (point-to-point), topic (publish-
 subscribe) and fanout (multicast)。 
 6)Queue: 消息最終被送到這裏等待consumer取走。一個message可以被同時拷貝到多個queue中。 
 7)Binding: exchange和queue之間的虛擬連接,binding中可以包含routing key。Binding信息被保存到 exchange中的查詢表中,用於message的分發依據。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章