AMQP,即 高級消息隊列協議 (Advanced Message Queuing Protocol),是壹個消息中間件應用層協議,用於組件之間的解耦,來提供 統壹消息服務。主要功能是 排序消息,路由消息(包括點對點和訂閱-發布),保證消息的可靠性和安全性。
遵循AMPQ協議的客戶端,都能通過 消息中間件 相互通信。這樣 客戶端 就可以采用不同的開發語言實現,彼此無強依賴關系,降低客戶端復雜性,提高開發效率也利於後期維護。
AMQP 的模型架構如下:
rabbitMQ是AMQP協議的壹個開源實現。架構模型同樣可以用以下的圖來表示:
如上圖,simple模式,單個publisher,單個queue,單個consumer
如上圖,work模式
多個consumer***用壹個queue的message
此種模式下,rabbitMQ會自動做負載均衡,將消息輪詢發送給各個消費者,即壹個消息只能被壹個消費者獲取
如上圖,publish / subscribe 發布訂閱模式(廣播模式)
相對前2種模式,多了壹個 exchange (type為fanout) ,message先發送到exchange,exchange再分別發送到對應的所有queue。而consumer訂閱自己的queue,在自己訂閱的queue上消費message。
示例應用場景,如下圖示:
比如 網上購物,下單支付成功後,通知用戶的方式有許多種,app推送,短信,email 等等。
message到來後被exchange發送到3個queue(app推送q,短信q,email_q)
之後 app推送服務,短信通知服務,email通知服務 從各自訂閱的queue獲取消息,通知用戶支付成功
如上圖示,exchange類型設定為direct
此時 message中的rountingKey 和 exchange中的bindingKey匹配,兩者相等則發送對應的queue中,如果匹配不到bindingKey,則丟棄該message。
示例應用場景,如下圖示:
比如服務產生的日誌,日誌有許多類型,error,info,debuf等類型的日誌,而我們的需求只想要將 error 類型的日誌寫入磁盤,就可以用routing模式,將error日誌路由到error queue,再由相應的 寫入磁盤服務獲取message,寫入磁盤
如上圖示,exchange類型為topic,相對於第4種模式,相同點是都根據 rountingKey 匹配,不同點是 topic 模式支持模糊匹配。