AMQP,即Advanced Message Queuing Protocol,高級消息隊列協(xié)議,是應用層協(xié)議的一個開放標準,是一個異步消息傳遞所使用的應用層協(xié)議規(guī)范,為面向消息的中間件設計。消息中間件主要用于組件之間的解耦,消息的發(fā)送者無需知道消息使用者的存在,反之亦然。
AMQP客戶端能夠無視消息來源任意發(fā)送和接受消息,Broker提供消息的路由、隊列等功能。Broker主要由Exchange和Queue組成:Exchange負責接收消息、轉發(fā)消息到綁定的隊列;Queue存儲消息,提供持久化、隊列等功能。AMQP客戶端通過Channel與Broker通信,Channel是多路復用連接中的一條獨立的雙向數據流通道。
RabbitMQ是一個由erlang開發(fā)的AMQP(Advanved Message Queue)的開源實現,支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系統(tǒng)中存儲轉發(fā)消息,在易用性、擴展性、高可用性等方面表現不俗。
AMQP的主要特征是面向消息、隊列、路由(包括點對點和發(fā)布/訂閱)、可靠性、安全。
隊列邏輯:
創(chuàng)建連接
–>創(chuàng)建channel
–>創(chuàng)建交換機
–>創(chuàng)建隊列
–>綁定交換機/隊列/路由鍵
–>接收消息
ConnectionFactory、Connection、Channel都是RabbitMQ對外提供的API中最基本的對象。
1、Connection是RabbitMQ的socket鏈接,它封裝了socket協(xié)議相關部分邏輯。
2、ConnectionFactory為Connection的制造工廠。
3、Channel是我們與RabbitMQ打交道的最重要的一個接口,我們大部分的業(yè)務操作是在Channel這個接口中完成的,包括定義Queue、定義Exchange、綁定Queue與Exchange、發(fā)布消息等。
Queue(隊列)是RabbitMQ的內部對象,用于存儲消息。
1、RabbitMQ中的消息都只能存儲在Queue中,生產者生產消息并最終投遞到Queue中,消費者可以從Queue中獲取消息并消費。
2、多個消費者可以訂閱同一個Queue,這時Queue中的消息會被平均分攤給多個消費者進行處理,而不是每個消費者都收到所有的消息并處理
參考
1、RabbitMQ-從基礎到實戰(zhàn)(1)— Hello RabbitMQ
2、RabbitMQ進程結構分析與性能調優(yōu)
3、如何保證RabbitMQ的消息不丟失及其背后的原理
4、RabbitMQ的應用場景以及基本原理介紹
5、RabbitMQ基礎概念詳細介紹
6、RocketMQ與kafka對比(18項差異)